diff --git a/.vscode/settings.json b/.vscode/settings.json index ba3550bf..41aeee58 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,5 +10,6 @@ ] }, "git.ignoreLimitWarning": true, - "cmake.sourceDirectory": "/workspaces/kvm-static-ip/internal/native/cgo" + "cmake.sourceDirectory": "/workspaces/kvm-static-ip/internal/native/cgo", + "cmake.ignoreCMakeListsMissing": true } \ No newline at end of file diff --git a/jsonrpc.go b/jsonrpc.go index 5ed90a7a..46d03864 100644 --- a/jsonrpc.go +++ b/jsonrpc.go @@ -932,6 +932,10 @@ func rpcSetCloudUrl(apiUrl string, appUrl string) error { disconnectCloud(fmt.Errorf("cloud url changed from %s to %s", currentCloudURL, apiUrl)) } + if publicIPState != nil { + publicIPState.SetCloudflareEndpoint(apiUrl) + } + if err := SaveConfig(); err != nil { return fmt.Errorf("failed to save config: %w", err) } @@ -1248,4 +1252,6 @@ var rpcHandlers = map[string]RPCHandler{ "setKeyboardMacros": {Func: setKeyboardMacros, Params: []string{"params"}}, "getLocalLoopbackOnly": {Func: rpcGetLocalLoopbackOnly}, "setLocalLoopbackOnly": {Func: rpcSetLocalLoopbackOnly, Params: []string{"enabled"}}, + "getPublicIPAddresses": {Func: rpcGetPublicIPAddresses, Params: []string{"refresh"}}, + "checkPublicIPAddresses": {Func: rpcCheckPublicIPAddresses}, } diff --git a/main.go b/main.go index bcc2d73d..66545bf6 100644 --- a/main.go +++ b/main.go @@ -126,6 +126,7 @@ func Main() { // As websocket client already checks if the cloud token is set, we can start it here. go RunWebsocketClient() + initPublicIPState() initSerialPort() sigs := make(chan os.Signal, 1) diff --git a/network.go b/network.go index 846f41f1..42fc6d87 100644 --- a/network.go +++ b/network.go @@ -3,12 +3,17 @@ package kvm import ( "context" "fmt" + "net" + "net/http" "reflect" + "time" "github.com/jetkvm/kvm/internal/confparser" "github.com/jetkvm/kvm/internal/mdns" "github.com/jetkvm/kvm/internal/network/types" + "github.com/jetkvm/kvm/pkg/myip" "github.com/jetkvm/kvm/pkg/nmlite" + "github.com/jetkvm/kvm/pkg/nmlite/link" ) const ( @@ -17,6 +22,7 @@ const ( var ( networkManager *nmlite.NetworkManager + publicIPState *myip.PublicIPState ) type RpcNetworkSettings struct { @@ -115,6 +121,14 @@ func networkStateChanged(_ string, state types.InterfaceState) { if state.Online { networkLogger.Info().Msg("network state changed to online, triggering time sync") triggerTimeSyncOnNetworkStateChange() + + if publicIPState != nil { + publicIPState.SetIPv4AndIPv6(state.IPv4Ready, state.IPv6Ready) + } + } else { + if publicIPState != nil { + publicIPState.SetIPv4AndIPv6(false, false) + } } // always restart mDNS when the network state changes @@ -164,6 +178,40 @@ func initNetwork() error { return nil } +func initPublicIPState() { + // the feature will be only enabled if the cloud has been adopted + // due to privacy reasons + + // but it will be initialized anyway to avoid nil pointer dereferences + ps := myip.NewPublicIPState(&myip.PublicIPStateConfig{ + Logger: networkLogger, + CloudflareEndpoint: config.CloudURL, + APIEndpoint: "", + IPv4: false, + IPv6: false, + HttpClientGetter: func(family int) *http.Client { + transport := http.DefaultTransport.(*http.Transport).Clone() + transport.Proxy = config.NetworkConfig.GetTransportProxyFunc() + transport.DialContext = func(ctx context.Context, network, addr string) (net.Conn, error) { + netType := network + switch family { + case link.AfInet: + netType = "tcp4" + case link.AfInet6: + netType = "tcp6" + } + return (&net.Dialer{}).DialContext(ctx, netType, addr) + } + + return &http.Client{ + Transport: transport, + Timeout: 30 * time.Second, + } + }, + }) + publicIPState = ps +} + func setHostname(nm *nmlite.NetworkManager, hostname, domain string) error { if nm == nil { return nil @@ -312,3 +360,25 @@ func rpcToggleDHCPClient() error { return rpcReboot(true) } + +func rpcGetPublicIPAddresses(refresh bool) ([]myip.PublicIP, error) { + if publicIPState == nil { + return nil, fmt.Errorf("public IP state not initialized") + } + + if refresh { + if err := publicIPState.ForceUpdate(); err != nil { + return nil, err + } + } + + return publicIPState.GetAddresses(), nil +} + +func rpcCheckPublicIPAddresses() error { + if publicIPState == nil { + return fmt.Errorf("public IP state not initialized") + } + + return publicIPState.ForceUpdate() +} diff --git a/pkg/myip/check.go b/pkg/myip/check.go new file mode 100644 index 00000000..9879bee7 --- /dev/null +++ b/pkg/myip/check.go @@ -0,0 +1,142 @@ +package myip + +import ( + "context" + "fmt" + "io" + "net" + "net/http" + "net/url" + "strings" + "sync" + "time" + + "github.com/jetkvm/kvm/pkg/nmlite/link" +) + +func (ps *PublicIPState) request(ctx context.Context, url string, family int) ([]byte, error) { + client := ps.httpClient(family) + + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) + if err != nil { + return nil, fmt.Errorf("error creating request: %w", err) + } + + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("error sending request: %w", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, fmt.Errorf("unexpected status code: %d", resp.StatusCode) + } + + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("error reading response body: %w", err) + } + + return body, err +} + +// checkCloudflare uses cdn-cgi/trace to get the public IP address +func (ps *PublicIPState) checkCloudflare(ctx context.Context, family int) (*PublicIP, error) { + u, err := url.JoinPath(ps.cloudflareEndpoint, "/cdn-cgi/trace") + if err != nil { + return nil, fmt.Errorf("error joining path: %w", err) + } + + body, err := ps.request(ctx, u, family) + if err != nil { + return nil, err + } + + for line := range strings.SplitSeq(string(body), "\n") { + key, value, ok := strings.Cut(line, "=") + if !ok || key != "ip" { + continue + } + + return &PublicIP{ + IPAddress: net.ParseIP(value), + LastUpdated: time.Now(), + }, nil + } + + return nil, fmt.Errorf("no IP address found") +} + +// checkAPI uses the API endpoint to get the public IP address +func (ps *PublicIPState) checkAPI(_ context.Context, _ int) (*PublicIP, error) { + return nil, fmt.Errorf("not implemented") +} + +// checkIPs checks both IPv4 and IPv6 public IP addresses in parallel +// and updates the IPAddresses slice with the results +func (ps *PublicIPState) checkIPs(ctx context.Context, checkIPv4, checkIPv6 bool) error { + var wg sync.WaitGroup + var mu sync.Mutex + var ips []PublicIP + var errors []error + + checkFamily := func(family int, familyName string) { + wg.Add(1) + go func(f int, name string) { + defer wg.Done() + + ip, err := ps.checkIPForFamily(ctx, f) + mu.Lock() + defer mu.Unlock() + if err != nil { + errors = append(errors, fmt.Errorf("%s check failed: %w", name, err)) + return + } + if ip != nil { + ips = append(ips, *ip) + } + }(family, familyName) + } + + if checkIPv4 { + checkFamily(link.AfInet, "IPv4") + } + + if checkIPv6 { + checkFamily(link.AfInet6, "IPv6") + } + + wg.Wait() + + if len(ips) > 0 { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.addresses = ips + ps.lastUpdated = time.Now() + } + + if len(errors) > 0 && len(ips) == 0 { + return errors[0] + } + + return nil +} + +func (ps *PublicIPState) checkIPForFamily(ctx context.Context, family int) (*PublicIP, error) { + if ps.apiEndpoint != "" { + ip, err := ps.checkAPI(ctx, family) + if err == nil && ip != nil { + return ip, nil + } + } + + if ps.cloudflareEndpoint != "" { + ip, err := ps.checkCloudflare(ctx, family) + if err == nil && ip != nil { + return ip, nil + } + } + + return nil, fmt.Errorf("all IP check methods failed for family %d", family) +} diff --git a/pkg/myip/ip.go b/pkg/myip/ip.go new file mode 100644 index 00000000..ef66188e --- /dev/null +++ b/pkg/myip/ip.go @@ -0,0 +1,209 @@ +package myip + +import ( + "context" + "fmt" + "net" + "net/http" + "net/url" + "sync" + "time" + + "github.com/jetkvm/kvm/internal/logging" + "github.com/rs/zerolog" +) + +type PublicIP struct { + IPAddress net.IP `json:"ip"` + LastUpdated time.Time `json:"last_updated"` +} + +type HttpClientGetter func(family int) *http.Client + +type PublicIPState struct { + addresses []PublicIP + lastUpdated time.Time + + cloudflareEndpoint string // cdn-cgi/trace domain + apiEndpoint string // api endpoint + ipv4 bool + ipv6 bool + httpClient HttpClientGetter + logger *zerolog.Logger + + timer *time.Timer + ctx context.Context + cancel context.CancelFunc + mu sync.Mutex +} + +type PublicIPStateConfig struct { + CloudflareEndpoint string + APIEndpoint string + IPv4 bool + IPv6 bool + HttpClientGetter HttpClientGetter + Logger *zerolog.Logger +} + +func stripURLPath(s string) string { + parsed, err := url.Parse(s) + if err != nil { + return "" + } + scheme := parsed.Scheme + if scheme != "http" && scheme != "https" { + scheme = "https" + } + + return fmt.Sprintf("%s://%s", scheme, parsed.Host) +} + +// NewPublicIPState creates a new PublicIPState +func NewPublicIPState(config *PublicIPStateConfig) *PublicIPState { + if config.Logger == nil { + config.Logger = logging.GetSubsystemLogger("publicip") + } + + ctx, cancel := context.WithCancel(context.Background()) + ps := &PublicIPState{ + addresses: make([]PublicIP, 0), + lastUpdated: time.Now(), + cloudflareEndpoint: stripURLPath(config.CloudflareEndpoint), + apiEndpoint: config.APIEndpoint, + ipv4: config.IPv4, + ipv6: config.IPv6, + httpClient: config.HttpClientGetter, + ctx: ctx, + cancel: cancel, + logger: config.Logger, + } + // Start the timer automatically + ps.Start() + return ps +} + +// SetFamily sets if we need to track IPv4 and IPv6 public IP addresses +func (ps *PublicIPState) SetIPv4AndIPv6(ipv4, ipv6 bool) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.ipv4 = ipv4 + ps.ipv6 = ipv6 +} + +// SetIPv4 sets if we need to track IPv4 public IP addresses +func (ps *PublicIPState) SetIPv4(ipv4 bool) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.ipv4 = ipv4 +} + +// SetIPv6 sets if we need to track IPv6 public IP addresses +func (ps *PublicIPState) SetIPv6(ipv6 bool) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.ipv6 = ipv6 +} + +// SetCloudflareEndpoint sets the Cloudflare endpoint +func (ps *PublicIPState) SetCloudflareEndpoint(endpoint string) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.cloudflareEndpoint = stripURLPath(endpoint) +} + +// SetAPIEndpoint sets the API endpoint +func (ps *PublicIPState) SetAPIEndpoint(endpoint string) { + ps.mu.Lock() + defer ps.mu.Unlock() + + ps.apiEndpoint = endpoint +} + +// GetAddresses returns the public IP addresses +func (ps *PublicIPState) GetAddresses() []PublicIP { + ps.mu.Lock() + defer ps.mu.Unlock() + + return ps.addresses +} + +// Start starts the timer loop to check public IP addresses periodically +func (ps *PublicIPState) Start() { + ps.mu.Lock() + defer ps.mu.Unlock() + + // Stop any existing timer + if ps.timer != nil { + ps.timer.Stop() + } + if ps.cancel != nil { + ps.cancel() + } + + // Create new context and cancel function + ps.ctx, ps.cancel = context.WithCancel(context.Background()) + + // Start the timer loop in a goroutine + go ps.timerLoop(ps.ctx) +} + +// Stop stops the timer loop +func (ps *PublicIPState) Stop() { + ps.mu.Lock() + defer ps.mu.Unlock() + + if ps.cancel != nil { + ps.cancel() + } + if ps.timer != nil { + ps.timer.Stop() + ps.timer = nil + } +} + +// ForceUpdate forces an update of the public IP addresses +func (ps *PublicIPState) ForceUpdate() error { + return ps.checkIPs(context.Background(), true, true) +} + +// timerLoop runs the periodic IP check loop +func (ps *PublicIPState) timerLoop(ctx context.Context) { + timer := time.NewTimer(5 * time.Minute) + defer timer.Stop() + + // Store timer reference for Stop() to access + ps.mu.Lock() + ps.timer = timer + checkIPv4 := ps.ipv4 + checkIPv6 := ps.ipv6 + ps.mu.Unlock() + + // Perform initial check immediately + checkIPs := func() { + if err := ps.checkIPs(ctx, checkIPv4, checkIPv6); err != nil { + ps.logger.Error().Err(err).Msg("failed to check public IP addresses") + } + } + + checkIPs() + + for { + select { + case <-timer.C: + // Perform the check + checkIPs() + + // Reset the timer for the next check + timer.Reset(5 * time.Minute) + + case <-ctx.Done(): + // Timer was stopped + return + } + } +} diff --git a/ui/localization/messages/da.json b/ui/localization/messages/da.json index dae6e906..c80bfcce 100644 --- a/ui/localization/messages/da.json +++ b/ui/localization/messages/da.json @@ -1,7 +1,7 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", "access_adopt_kvm": "Adopter KVM til skyen", - "access_adopted_message": "Din enhed er tilknyttet skyen", + "access_adopted_message": "Din enhed er tilpasset til skyen", "access_auth_mode_no_password": "Aktuel tilstand: Ingen adgangskode", "access_auth_mode_password": "Aktuel tilstand: Adgangskodebeskyttet", "access_authentication_mode_title": "Godkendelsestilstand", @@ -15,7 +15,7 @@ "access_cloud_provider_title": "Cloud-udbyder", "access_cloud_security_title": "Cloud-sikkerhed", "access_confirm_deregister": "Er du sikker på, at du vil afregistrere denne enhed?", - "access_deregister": "Afregistrer fra skyen", + "access_deregister": "Afregistrering fra Cloud", "access_description": "Administrer adgangskontrollen for enheden", "access_disable_protection": "Deaktiver beskyttelse", "access_enable_password": "Aktivér adgangskode", @@ -40,7 +40,7 @@ "access_security_streams": "Alle streams krypteret under transit", "access_security_zero_trust": "Zero Trust-sikkerhedsmodel", "access_title": "Adgang", - "access_tls_certificate_description": "Indsæt dit TLS-certifikat nedenfor. For certifikatkæder skal du inkludere hele kæden (brugercertifikat, mellemliggende og rodcertifikater).", + "access_tls_certificate_description": "Indsæt dit TLS-certifikat nedenfor. For certifikatkæder skal du inkludere hele kæden (blad-, mellem- og rodcertifikater).", "access_tls_certificate_title": "TLS-certifikat", "access_tls_custom": "Tilpasset", "access_tls_disabled": "Deaktiveret", @@ -55,7 +55,7 @@ "action_bar_virtual_media": "Virtuelle medier", "action_bar_wake_on_lan": "Vågn på LAN", "action_bar_web_terminal": "Webterminal", - "advanced_description": "Få adgang til avancerede indstillinger til fejlfinding og tilpasning", + "advanced_description": "Få adgang til yderligere indstillinger til fejlfinding og tilpasning", "advanced_dev_channel_description": "Modtag tidlige opdateringer fra udviklingskanalen", "advanced_dev_channel_title": "Opdateringer af udviklerkanaler", "advanced_developer_mode_description": "Aktivér avancerede funktioner for udviklere", @@ -76,7 +76,7 @@ "advanced_error_usb_emulation_enable": "Kunne ikke aktivere USB-emulering: {error}", "advanced_loopback_only_description": "Begræns webgrænsefladeadgang kun til localhost (127.0.0.1)", "advanced_loopback_only_title": "Kun loopback-tilstand", - "advanced_loopback_warning_before": "Før du aktiverer denne funktion, skal du sikre dig, at du har enten:", + "advanced_loopback_warning_before": "Før du aktiverer denne funktion, skal du sørge for at du har enten:", "advanced_loopback_warning_cloud": "Cloud-adgang aktiveret og fungerer", "advanced_loopback_warning_confirm": "Jeg forstår, aktivér alligevel", "advanced_loopback_warning_description": "ADVARSEL: Dette vil begrænse adgangen til webgrænsefladen til kun localhost (127.0.0.1).", @@ -94,7 +94,7 @@ "advanced_success_loopback_enabled": "Kun loopback-tilstand aktiveret. Genstart din enhed for at anvende den.", "advanced_success_reset_config": "Konfigurationen er nulstillet til standard", "advanced_success_update_ssh_key": "SSH-nøglen er blevet opdateret", - "advanced_title": "Avanceret", + "advanced_title": "Fremskreden", "advanced_troubleshooting_mode_description": "Diagnostiske værktøjer og yderligere kontroller til fejlfinding og udviklingsformål", "advanced_troubleshooting_mode_title": "Fejlfindingstilstand", "advanced_update_ssh_key_button": "Opdater SSH-nøgle", @@ -104,7 +104,7 @@ "already_adopted_other_user": "Denne enhed er i øjeblikket registreret til en anden bruger i vores cloud-dashboard.", "already_adopted_return_to_dashboard": "Tilbage til dashboardet", "already_adopted_title": "Enheden er allerede registreret", - "appearance_description": "Vælg dit foretrukne tema", + "appearance_description": "Vælg dit foretrukne farvetema", "appearance_page_description": "Tilpas udseendet og følelsen af din JetKVM-grænseflade", "appearance_theme": "Tema", "appearance_theme_dark": "Mørk", @@ -131,7 +131,7 @@ "auth_header_cta_new_to_jetkvm": "Ny bruger af JetKVM?", "auth_login": "Log ind på din JetKVM-konto", "auth_login_action": "Log ind", - "auth_login_description": "Log ind for sikkert at få adgang til og administrere dine enheder", + "auth_login_description": "Log ind for at få adgang til og administrere dine enheder sikkert", "auth_mode_local": "Lokal godkendelsesmetode", "auth_mode_local_change_later": "Du kan altid ændre din godkendelsesmetode senere i indstillingerne.", "auth_mode_local_description": "Vælg, hvordan du vil sikre din JetKVM-enhed lokalt.", @@ -147,7 +147,7 @@ "auth_mode_local_password_set": "Indstil en adgangskode", "auth_mode_local_password_set_button": "Indstil adgangskode", "auth_mode_local_password_set_description": "Opret en stærk adgangskode for at sikre din JetKVM-enhed lokalt.", - "auth_mode_local_password_set_label": "Indtast adgangskode", + "auth_mode_local_password_set_label": "Indtast en adgangskode", "auth_signup_connect_to_cloud_action": "Tilmeld og tilslut enhed", "auth_signup_create_account": "Opret din JetKVM-konto", "auth_signup_create_account_action": "Opret konto", @@ -160,7 +160,7 @@ "cloud_kvms_description": "Administrer dine cloud-KVM'er, og opret forbindelse til dem sikkert.", "cloud_kvms_no_devices": "Ingen enheder fundet", "cloud_kvms_no_devices_description": "Du har endnu ingen enheder med aktiveret JetKVM Cloud.", - "confirm": "Bekræft", + "confirm": "Bekræfte", "connect_to_kvm": "Opret forbindelse til KVM", "connecting_to_device": "Forbinder til enhed…", "connection_established": "Forbindelse etableret", @@ -184,7 +184,7 @@ "connection_stats_unit_packets": " pakker", "connection_stats_video": "Video", "connection_stats_video_description": "Videostreamen fra JetKVM'en til klienten.", - "continue": "Fortsæt", + "continue": "Fortsætte", "creating_peer_connection": "Opretter peer-forbindelse…", "dc_power_control_current": "Strøm", "dc_power_control_current_unit": "EN", @@ -205,7 +205,7 @@ "deregister_cloud_devices": "Cloud-enheder", "deregister_description": "Dette vil fjerne enheden fra din cloud-konto og tilbagekalde fjernadgang til den. Bemærk venligst, at lokal adgang stadig vil være mulig.", "deregister_error": "Der opstod en fejl {status} under afregistreringen af din enhed. Prøv igen.", - "deregister_from_cloud": "Afregistrer fra skyen", + "deregister_from_cloud": "Afregistrering fra Cloud", "deregister_headline": "Afregistrér {device} fra din cloud-konto", "detach": "Løsrive", "dhcp_empty_lease_description": "Vi har endnu ikke modtaget nogen DHCP-leaseoplysninger fra enheden.", @@ -253,7 +253,7 @@ "general_title": "Generel", "general_update_app_update_title": "App-opdatering", "general_update_application_type": "App", - "general_update_available_description": "En ny opdatering er tilgængelig, som forbedrer ydeevne og kompatibilitet. Vi anbefaler at opdatere for at sikre, at alt kører problemfrit.", + "general_update_available_description": "En ny opdatering er tilgængelig for at forbedre systemets ydeevne og kompatibilitet. Vi anbefaler at opdatere for at sikre, at alt kører problemfrit.", "general_update_available_title": "Opdatering tilgængelig", "general_update_background_button": "Opdatering i baggrunden", "general_update_check_again_button": "Tjek igen", @@ -264,7 +264,7 @@ "general_update_error_description": "Der opstod en fejl under opdateringen af din enhed. Prøv igen senere.", "general_update_error_details": "Fejldetaljer: {errorMessage}", "general_update_error_title": "Opdateringsfejl", - "general_update_later_button": "Opdater senere", + "general_update_later_button": "Gør det senere", "general_update_now_button": "Opdater nu", "general_update_rebooting": "Genstarter for at fuldføre opdateringen…", "general_update_status_awaiting_reboot": "Venter på genstart", @@ -277,7 +277,7 @@ "general_update_system_update_title": "Linux-systemopdatering", "general_update_up_to_date_description": "Dit system kører den nyeste version. Der er ingen tilgængelige opdateringer i øjeblikket.", "general_update_up_to_date_title": "Systemet er opdateret", - "general_update_updating_description": "Sluk ikke enheden. Denne proces kan tage et par minutter.", + "general_update_updating_description": "Sluk ikke din enhed. Denne proces kan tage et par minutter.", "general_update_updating_title": "Opdatering af din enhed", "getting_remote_session_description": "Henter beskrivelse af fjernsessionsforsøg {attempt}", "hardware_backlight_settings_error": "Kunne ikke indstille baggrundsbelysningsindstillinger: {error}", @@ -305,7 +305,7 @@ "hardware_power_saving_failed_error": "Kunne ikke indstille strømsparetilstand: {error}", "hardware_power_saving_hdmi_sleep_description": "Slå optagelse fra efter 90 sekunders inaktivitet", "hardware_power_saving_hdmi_sleep_title": "HDMI-dvaletilstand", - "hardware_power_saving_title": "Strømsparetilstand", + "hardware_power_saving_title": "Strømbesparelse", "hardware_time_10_minutes": "10 minutter", "hardware_time_1_hour": "1 time", "hardware_time_1_minute": "1 minut", @@ -315,7 +315,7 @@ "hardware_title": "Hardware", "hardware_turn_off_display_after_description": "Periode med inaktivitet før displayet automatisk slukker", "hardware_turn_off_display_after_title": "Sluk skærmen efter", - "hide": "Skjul", + "hide": "Skjule", "ice_gathering_completed": "ICE-indsamlingen er afsluttet", "info_caps_lock": "Caps Lock", "info_compose": "Skriv", @@ -386,7 +386,7 @@ "local_auth_create_title": "Beskyttelse af lokal enhed", "local_auth_current_password_label": "Nuværende adgangskode", "local_auth_disable_local_device_protection_description": "Indtast din nuværende adgangskode for at deaktivere lokal enhedsbeskyttelse.", - "local_auth_disable_local_device_protection_title": "Deaktiver beskyttelse for lokal adgang", + "local_auth_disable_local_device_protection_title": "Deaktiver lokal enhedsbeskyttelse", "local_auth_disable_protection_button": "Deaktiver beskyttelse", "local_auth_enter_current_password_placeholder": "Indtast din nuværende adgangskode", "local_auth_enter_new_password_placeholder": "Indtast en ny stærk adgangskode", @@ -472,7 +472,7 @@ "macros_deleted_success": "Makro \" {name} \" slettet", "macros_deleting": "Sletning", "macros_duplicated_success": "Makro \" {name} \" duplikeret", - "macros_edit_button": "Rediger", + "macros_edit_button": "Redigere", "macros_edit_description": "Rediger din tastaturmakro", "macros_edit_title": "Rediger makro", "macros_failed_create": "Kunne ikke oprette makro", @@ -503,7 +503,7 @@ "mount_button_continue_upload": "Fortsæt upload", "mount_button_mount_file": "Monter fil", "mount_button_mount_url": "Monterings-URL", - "mount_button_select": "Vælg", + "mount_button_select": "Vælge", "mount_button_showing_results": "Viser resultater fra {from} til {to} af resultaterne fra {total}", "mount_button_upload_new_image": "Upload et nyt billede", "mount_bytes_free": "{bytesFree} fri", @@ -525,7 +525,7 @@ "mount_mode_disk": "Disk", "mount_mounted_as": "Monteret som", "mount_mounted_from_storage": "Monteret fra JetKVM-lager", - "mount_no_images_description": "Upload et billede for at begynde at montere et virtuelt medie.", + "mount_no_images_description": "Upload et billede for at starte montering af virtuel medie.", "mount_no_images_title": "Ingen billeder tilgængelige", "mount_no_mounted_media": "Ingen monterede medier", "mount_percentage_used": "{percentageUsed} % brugt", @@ -539,7 +539,7 @@ "mount_upload_error": "Uploadfejl: {error}", "mount_upload_failed_datachannel": "Kunne ikke oprette datakanal til filupload", "mount_upload_failed_rtc": "Upload mislykkedes: {error}", - "mount_upload_successful": "Upload fuldført", + "mount_upload_successful": "Uploaden er gennemført", "mount_upload_title": "Upload nyt billede", "mount_uploaded_has_been_uploaded": "{name} er blevet uploadet", "mount_uploading": "Uploader…", @@ -601,7 +601,7 @@ "network_domain_dhcp_provided": "DHCP leveret", "network_domain_local": ".lokal", "network_domain_title": "Domæne", - "network_hostname_description": "Enhedens navn på netværket. Efterlad tomt for standardværdi.", + "network_hostname_description": "Enhedsidentifikator på netværket. Tom for systemstandard", "network_hostname_title": "Værtsnavn", "network_http_proxy_description": "Proxyserver til udgående HTTP(S)-anmodninger fra enheden. Tom, hvis ingen er til stede.", "network_http_proxy_invalid": "Ugyldig HTTP-proxy-URL", @@ -657,7 +657,7 @@ "network_save_settings_apply_title": "Anvend netværksindstillinger", "network_save_settings_confirm": "Anvend ændringer", "network_save_settings_confirm_description": "Følgende netværksindstillinger vil blive anvendt. Disse ændringer kan kræve en genstart og forårsage en kortvarig afbrydelse.", - "network_save_settings_confirm_heading": "Ændringer i konfigurationen", + "network_save_settings_confirm_heading": "Konfigurationsændringer", "network_save_settings_failed": "Kunne ikke gemme netværksindstillinger: {error}", "network_save_settings_success": "Netværksindstillinger gemt", "network_settings_add_dns": "Tilføj DNS-server", @@ -716,7 +716,7 @@ "rename_device_no_name": "Angiv venligst et navn", "retry": "Prøv igen", "saving": "Gemmer…", - "search_placeholder": "Søg…", + "search_placeholder": "Søge…", "serial_console": "Seriel konsol", "serial_console_baud_rate": "Baudhastighed", "serial_console_configure_description": "Konfigurer dine serielle konsolindstillinger", @@ -735,7 +735,7 @@ "setting_remote_session_description": "Indstilling af beskrivelse af fjernsession...", "setting_up_connection_to_device": "Opretter forbindelse til enhed...", "settings_access": "Adgang", - "settings_advanced": "Avanceret", + "settings_advanced": "Fremskreden", "settings_appearance": "Udseende", "settings_back_to_kvm": "Tilbage til KVM", "settings_general": "Generel", @@ -818,7 +818,7 @@ "video_custom_edid_title": "Brugerdefineret EDID", "video_debugging_info_description": "Fejlfindingsoplysninger for video", "video_debugging_info_title": "Fejlfindingsoplysninger", - "video_description": "Konfigurer video- og skærmindstillinger for optimal kompatibilitet", + "video_description": "Konfigurer skærmindstillinger og EDID for optimal kompatibilitet", "video_edid_acer_b246wl": "Acer B246WL, 1920x1200", "video_edid_asus_pa248qv": "ASUS PA248QV, 1920x1200", "video_edid_custom": "Tilpasset", @@ -839,8 +839,8 @@ "video_overlay_autoplay_permissions_required": "Tilladelser til automatisk afspilning kræves", "video_overlay_conn_check_cables": "Kontroller alle kabelforbindelser for løse eller beskadigede ledninger", "video_overlay_conn_ensure_network": "Sørg for, at din netværksforbindelse er stabil og aktiv", - "video_overlay_conn_restart": "Prøv at genstarte både enheden og computeren", - "video_overlay_conn_verify_power": "Sørg for, at enheden er tændt og korrekt tilsluttet", + "video_overlay_conn_restart": "Prøv at genstarte både enheden og din computer", + "video_overlay_conn_verify_power": "Kontroller, at enheden er tændt og korrekt tilsluttet", "video_overlay_connection_issue_title": "Forbindelsesproblem registreret", "video_overlay_enable_autoplay_settings": "Juster venligst browserindstillingerne for at aktivere automatisk afspilning", "video_overlay_hdmi_error_title": "HDMI-signalfejl registreret.", @@ -855,12 +855,6 @@ "video_overlay_no_hdmi_ensure_power": "Sørg for, at kildeenheden er tændt og sender et signal", "video_overlay_no_hdmi_signal": "Intet HDMI-signal registreret.", "video_overlay_pointerlock_click_to_enable": "Klik på videoen for at aktivere musestyring", - "video_overlay_reboot_device_is_rebooting": "Enheden genstarter", - "video_overlay_reboot_different_ip_message": "Enheden er muligvis genstartet med en anden IP-adresse. Tjek JetKVM'ens fysiske display for at finde den aktuelle IP-adresse, og genopret forbindelsen.", - "video_overlay_reboot_please_wait_message": "Vent venligst, mens enheden genstarter. Dette tager normalt 20-30 sekunder.", - "video_overlay_reboot_timeout_message": "Timeout for automatisk genoprettelse", - "video_overlay_reboot_unable_to_reconnect": "Kan ikke genoprette forbindelsen", - "video_overlay_reboot_waiting_for_restart": "Venter på, at enheden genstarter…", "video_overlay_retrying_connection": "Prøver at oprette forbindelse igen…", "video_overlay_troubleshooting_guide": "Fejlfindingsvejledning", "video_overlay_try_again": "Prøv igen", diff --git a/ui/localization/messages/de.json b/ui/localization/messages/de.json index 04e25844..1869029f 100644 --- a/ui/localization/messages/de.json +++ b/ui/localization/messages/de.json @@ -1,7 +1,7 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", "access_adopt_kvm": "KVM in die Cloud integrieren", - "access_adopted_message": "Ihr Gerät wurde in die Cloud übernommen", + "access_adopted_message": "Ihr Gerät wird in die Cloud übernommen", "access_auth_mode_no_password": "Aktueller Modus: Kein Passwort", "access_auth_mode_password": "Aktueller Modus: Passwortgeschützt", "access_authentication_mode_title": "Authentifizierungsmodus", @@ -16,7 +16,7 @@ "access_cloud_security_title": "Cloud-Sicherheit", "access_confirm_deregister": "Möchten Sie dieses Gerät wirklich abmelden?", "access_deregister": "Abmelden von der Cloud", - "access_description": "Verwalten Sie die Zugriffssteuerung Ihres Geräts", + "access_description": "Verwalten Sie die Zugriffskontrolle des Geräts", "access_disable_protection": "Schutz deaktivieren", "access_enable_password": "Kennwort aktivieren", "access_failed_deregister": "Abmeldung des Geräts fehlgeschlagen: {error}", @@ -33,13 +33,13 @@ "access_private_key_label": "Privater Schlüssel", "access_provider_custom": "Benutzerdefiniert", "access_provider_jetkvm": "JetKVM Cloud", - "access_remote_description": "Verwalten Sie die Einstellungen für den Fernzugriff", + "access_remote_description": "Verwalten Sie den Modus des Fernzugriffs auf das Gerät", "access_security_encryption": "Ende-zu-Ende-Verschlüsselung mit WebRTC (DTLS und SRTP)", "access_security_oidc": "OIDC (OpenID Connect)-Authentifizierung", "access_security_open_source": "Alle Cloud-Komponenten sind Open Source und auf GitHub verfügbar.", "access_security_streams": "Alle Streams werden während der Übertragung verschlüsselt", "access_security_zero_trust": "Zero Trust-Sicherheitsmodell", - "access_title": "Zugriff", + "access_title": "Zugang", "access_tls_certificate_description": "Fügen Sie unten Ihr TLS-Zertifikat ein. Geben Sie bei Zertifikatsketten die gesamte Kette an (Blatt-, Zwischen- und Stammzertifikate).", "access_tls_certificate_title": "TLS-Zertifikat", "access_tls_custom": "Benutzerdefiniert", @@ -48,7 +48,7 @@ "access_tls_updated": "TLS-Einstellungen erfolgreich aktualisiert", "access_update_tls_settings": "TLS-Einstellungen aktualisieren", "action_bar_connection_stats": "Verbindungsstatistiken", - "action_bar_extension": "Erweiterung", + "action_bar_extension": "Verlängerung", "action_bar_fullscreen": "Vollbild", "action_bar_settings": "Einstellungen", "action_bar_virtual_keyboard": "Virtuelle Tastatur", @@ -94,7 +94,7 @@ "advanced_success_loopback_enabled": "Nur-Loopback-Modus aktiviert. Starten Sie Ihr Gerät neu, um die Funktion anzuwenden.", "advanced_success_reset_config": "Konfiguration erfolgreich auf Standard zurückgesetzt", "advanced_success_update_ssh_key": "SSH-Schlüssel erfolgreich aktualisiert", - "advanced_title": "Erweitert", + "advanced_title": "Fortschrittlich", "advanced_troubleshooting_mode_description": "Diagnosetools und zusätzliche Steuerelemente für Fehlerbehebungs- und Entwicklungszwecke", "advanced_troubleshooting_mode_title": "Fehlerbehebungsmodus", "advanced_update_ssh_key_button": "SSH-Schlüssel aktualisieren", @@ -110,27 +110,27 @@ "appearance_theme_dark": "Dunkel", "appearance_theme_light": "Hell", "appearance_theme_system": "System", - "appearance_title": "Darstellung", - "attach": "Anhängen", + "appearance_title": "Aussehen", + "attach": "Befestigen", "atx_power_control_get_state_error": "ATX-Stromversorgungsstatus konnte nicht abgerufen werden: {error}", "atx_power_control_hdd_led": "Festplatten-LED", "atx_power_control_long_power_button": "Langes Drücken", - "atx_power_control_power_button": "Power-Taste", + "atx_power_control_power_button": "Leistung", "atx_power_control_power_led": "Betriebs-LED", - "atx_power_control_reset_button": "Reset-Taste", + "atx_power_control_reset_button": "Zurücksetzen", "atx_power_control_send_action_error": "ATX-Stromversorgungsaktion {action} konnte nicht gesendet werden: {error}", "atx_power_control_short_power_button": "Kurzes Drücken", "auth_authentication_mode": "Bitte wählen Sie einen Authentifizierungsmodus", "auth_authentication_mode_error": "Beim Einstellen des Authentifizierungsmodus ist ein Fehler aufgetreten", "auth_authentication_mode_invalid": "Ungültiger Authentifizierungsmodus", - "auth_connect_to_cloud": "JetKVM mit der Cloud verbinden", + "auth_connect_to_cloud": "Verbinden Sie Ihr JetKVM mit der Cloud", "auth_connect_to_cloud_action": "Anmelden und Gerät verbinden", "auth_connect_to_cloud_description": "Schalten Sie den Fernzugriff und erweiterte Funktionen für Ihr Gerät frei", "auth_header_cta_already_have_account": "Hast du schon ein Konto?", "auth_header_cta_dont_have_account": "Sie haben noch kein Konto?", "auth_header_cta_new_to_jetkvm": "Neu bei JetKVM?", "auth_login": "Melden Sie sich bei Ihrem JetKVM-Konto an", - "auth_login_action": "Anmelden", + "auth_login_action": "Einloggen", "auth_login_description": "Melden Sie sich an, um sicher auf Ihre Geräte zuzugreifen und sie zu verwalten", "auth_mode_local": "Lokale Authentifizierungsmethode", "auth_mode_local_change_later": "Sie können Ihre Authentifizierungsmethode später jederzeit in den Einstellungen ändern.", @@ -153,8 +153,8 @@ "auth_signup_create_account_action": "Benutzerkonto erstellen", "auth_signup_create_account_description": "Erstellen Sie Ihr Konto und beginnen Sie mit der einfachen Verwaltung Ihrer Geräte.", "back": "Zurück", - "back_to_devices": "Zurück zu den Geräten", - "cancel": "Abbrechen", + "back_to_devices": "Zurück zu Geräte", + "cancel": "Stornieren", "close": "Schließen", "cloud_kvms": "Cloud-KVMs", "cloud_kvms_description": "Verwalten Sie Ihre Cloud-KVMs und stellen Sie eine sichere Verbindung zu ihnen her.", @@ -184,19 +184,19 @@ "connection_stats_unit_packets": " Pakete", "connection_stats_video": "Video", "connection_stats_video_description": "Der Videostream vom JetKVM zum Client.", - "continue": "Weiter", + "continue": "Weitermachen", "creating_peer_connection": "Peer-Verbindung wird hergestellt …", "dc_power_control_current": "Aktuell", "dc_power_control_current_unit": "A", "dc_power_control_get_state_error": "Der Gleichstromstatus konnte nicht abgerufen werden: {error}", - "dc_power_control_power": "Stromversorgung", + "dc_power_control_power": "Leistung", "dc_power_control_power_off_button": "Ausschalten", "dc_power_control_power_off_state": "Ausschalten", "dc_power_control_power_on_button": "Einschalten", "dc_power_control_power_on_state": "Einschalten", "dc_power_control_power_unit": "W", "dc_power_control_restore_last_state": "Letzter Zustand", - "dc_power_control_restore_power_state": "Nach Stromausfall wiederherstellen", + "dc_power_control_restore_power_state": "Wiederherstellung nach Stromausfall", "dc_power_control_set_power_state_error": "Der DC-Stromversorgungsstatus konnte nicht an {enabled} werden: {error}", "dc_power_control_set_restore_state_error": "Der Status zur Wiederherstellung der Gleichstromversorgung konnte nicht an {state} gesendet werden: {error}", "dc_power_control_voltage": "Stromspannung", @@ -264,7 +264,7 @@ "general_update_error_description": "Beim Aktualisieren Ihres Geräts ist ein Fehler aufgetreten. Bitte versuchen Sie es später noch einmal.", "general_update_error_details": "Fehlerdetails: {errorMessage}", "general_update_error_title": "Aktualisierungsfehler", - "general_update_later_button": "Später", + "general_update_later_button": "Mach es später", "general_update_now_button": "Jetzt aktualisieren", "general_update_rebooting": "Neustart zum Abschließen des Updates …", "general_update_status_awaiting_reboot": "Warte auf Neustart", @@ -315,7 +315,7 @@ "hardware_title": "Hardware", "hardware_turn_off_display_after_description": "Zeitraum der Inaktivität, bevor sich das Display automatisch ausschaltet", "hardware_turn_off_display_after_title": "Display ausschalten nach", - "hide": "Ausblenden", + "hide": "Verstecken", "ice_gathering_completed": "ICE-Treffen abgeschlossen", "info_caps_lock": "Feststelltaste", "info_compose": "Komponieren", @@ -419,7 +419,7 @@ "locale_sv": "Schwedisch", "locale_zh": "中文 (简体)", "log_in": "Einloggen", - "log_out": "Abmelden", + "log_out": "Ausloggen", "logged_in_as": "Angemeldet als", "login_enter_password": "Geben Sie Ihr Passwort ein", "login_enter_password_description": "Geben Sie Ihr Passwort ein, um auf Ihr JetKVM zuzugreifen.", @@ -452,7 +452,7 @@ "macro_steps_description": "Tasten/Modifikatoren werden nacheinander mit einer Verzögerung zwischen den einzelnen Schritten ausgeführt.", "macro_steps_label": "Schritte", "macros_add_description": "Erstellen Sie ein neues Tastaturmakro", - "macros_add_new": "Neues Makro", + "macros_add_new": "Neues Makro hinzufügen", "macros_add_new_macro": "Neues Makro hinzufügen", "macros_aria_add_new": "Neues Makro hinzufügen", "macros_aria_delete": "Makro löschen {name}", @@ -561,16 +561,16 @@ "mouse_hide_cursor_description": "Den Cursor beim Senden von Mausbewegungen ausblenden", "mouse_hide_cursor_title": "Cursor ausblenden", "mouse_jiggler_config_updated": "Jiggler-Konfiguration erfolgreich aktualisiert", - "mouse_jiggler_custom": "Benutzerdefiniert", + "mouse_jiggler_custom": "Brauch", "mouse_jiggler_description": "Simulieren Sie die Bewegung einer Computermaus", "mouse_jiggler_disabled": "Deaktiviert", "mouse_jiggler_error_config": "Beim Festlegen der Jiggler-Konfiguration ist ein Fehler aufgetreten", "mouse_jiggler_failed_state": "Jiggler-Status konnte nicht festgelegt werden: {error}", - "mouse_jiggler_frequent": "Häufig – alle 30 Sek.", + "mouse_jiggler_frequent": "Häufig - 30er", "mouse_jiggler_invalid_cron": "Ungültiger Cron-Ausdruck. Bitte überprüfen Sie Ihr Zeitplanformat (z. B. „0 * * * * *“ für jede Minute).", - "mouse_jiggler_light": "Leicht – 5 Min", - "mouse_jiggler_standard": "Standard – 1 Min", - "mouse_jiggler_title": "Jiggler", + "mouse_jiggler_light": "Licht - 5m", + "mouse_jiggler_standard": "Standard - 1 m", + "mouse_jiggler_title": "Wackel", "mouse_mode_absolute": "Absolute", "mouse_mode_absolute_description": "Am bequemsten", "mouse_mode_relative": "Relativ", @@ -596,7 +596,7 @@ "network_dhcp_lease_renew_confirm_new_b": "Möglicherweise müssen Sie die Verbindung mit der neuen Adresse erneut herstellen", "network_dhcp_lease_renew_failed": "Leasing konnte nicht erneuert werden: {error}", "network_dhcp_lease_renew_success": "DHCP-Lease erneuert", - "network_domain_custom": "Benutzerdefiniert", + "network_domain_custom": "Brauch", "network_domain_description": "Netzwerkdomänensuffix für das Gerät", "network_domain_dhcp_provided": "DHCP bereitgestellt", "network_domain_local": ".lokal", @@ -611,7 +611,7 @@ "network_ipv4_gateway": "IPv4-Gateway", "network_ipv4_invalid": "Ungültige IPv4-Adresse", "network_ipv4_invalid_cidr": "Ungültige CIDR-Notation für IPv4-Adresse", - "network_ipv4_mode_description": "IPv4-Modus konfigurieren", + "network_ipv4_mode_description": "Konfigurieren des IPv4-Modus", "network_ipv4_mode_dhcp": "DHCP", "network_ipv4_mode_static": "Statisch", "network_ipv4_mode_title": "IPv4-Modus", @@ -635,7 +635,7 @@ "network_ipv6_prefix": "IP-Präfix", "network_ipv6_prefix_invalid": "Das Präfix muss zwischen 0 und 128 liegen", "network_ll_dp_all": "Alle", - "network_ll_dp_basic": "Standard", + "network_ll_dp_basic": "Basic", "network_ll_dp_description": "Steuern Sie, welche TLVs über das Link Layer Discovery Protocol gesendet werden", "network_ll_dp_disabled": "Deaktiviert", "network_ll_dp_title": "LLDP", @@ -644,7 +644,7 @@ "network_mac_address_description": "Hardwarekennung für die Netzwerkschnittstelle", "network_mac_address_title": "MAC-Adresse", "network_mdns_auto": "Auto", - "network_mdns_description": "mDNS-Betriebsmodus steuern (Multicast-DNS)", + "network_mdns_description": "Steuern des mDNS-Betriebsmodus (Multicast-DNS)", "network_mdns_disabled": "Deaktiviert", "network_mdns_ipv4_only": "Nur IPv4", "network_mdns_ipv6_only": "Nur IPv6", @@ -655,11 +655,11 @@ "network_pending_dhcp_mode_change_headline": "Ausstehende Änderung des DHCP-IPv4-Modus", "network_save_settings": "Einstellungen speichern", "network_save_settings_apply_title": "Netzwerkeinstellungen anwenden", - "network_save_settings_confirm": "Änderungen anwenden", + "network_save_settings_confirm": "Änderungen übernehmen", "network_save_settings_confirm_description": "Die folgenden Netzwerkeinstellungen werden angewendet. Diese Änderungen erfordern möglicherweise einen Neustart und können zu einer kurzen Unterbrechung der Verbindung führen.", "network_save_settings_confirm_heading": "Konfigurationsänderungen", "network_save_settings_failed": "Netzwerkeinstellungen konnten nicht gespeichert werden: {error}", - "network_save_settings_success": "Netzwerkeinstellungen erfolgreich gespeichert", + "network_save_settings_success": "Netzwerkeinstellungen gespeichert", "network_settings_add_dns": "DNS-Server hinzufügen", "network_settings_load_error": "Netzwerkeinstellungen konnten nicht geladen werden: {error}", "network_static_ipv4_header": "Statische IPv4-Konfiguration", @@ -714,8 +714,8 @@ "rename_device_new_name_label": "Neuer Gerätename", "rename_device_new_name_placeholder": "Plex Media Server", "rename_device_no_name": "Bitte geben Sie einen Namen an", - "retry": "Erneut versuchen", - "saving": "Wird gespeichert…", + "retry": "Wiederholen", + "saving": "Speichern…", "search_placeholder": "Suchen…", "serial_console": "Serielle Konsole", "serial_console_baud_rate": "Baudrate", @@ -734,9 +734,9 @@ "setting_remote_description": "Beschreibung der Fernbedienung einstellen", "setting_remote_session_description": "Beschreibung der Remote-Sitzung festlegen ...", "setting_up_connection_to_device": "Verbindung zum Gerät wird eingerichtet …", - "settings_access": "Zugriff", - "settings_advanced": "Erweitert", - "settings_appearance": "Darstellung", + "settings_access": "Zugang", + "settings_advanced": "Fortschrittlich", + "settings_appearance": "Aussehen", "settings_back_to_kvm": "Zurück zu KVM", "settings_general": "Allgemein", "settings_hardware": "Hardware", @@ -757,12 +757,12 @@ "time_division_years": "Jahre", "troubleshoot_connection": "Verbindungsprobleme beheben", "unknown_error": "Unbekannter Fehler", - "update_in_progress": "Update wird durchgeführt", + "update_in_progress": "Aktualisierung läuft", "updates_failed_check": "Fehler beim Suchen nach Updates: {error}", "updates_failed_get_device_version": "Geräteversion konnte nicht abgerufen werden: {error}", "updating_leave_device_on": "Bitte schalten Sie Ihr Gerät nicht aus…", "usb": "USB", - "usb_config_custom": "Benutzerdefiniert", + "usb_config_custom": "Brauch", "usb_config_default": "JetKVM-Standard", "usb_config_dell": "Dell Multimedia Pro-Tastatur", "usb_config_failed_load": "USB-Konfiguration konnte nicht geladen werden: {error}", @@ -786,7 +786,7 @@ "usb_config_vendor_id_placeholder": "Geben Sie die Lieferanten-ID ein", "usb_device_classes_description": "USB-Geräteklassen im Verbundgerät", "usb_device_classes_title": "Klassen", - "usb_device_custom": "Benutzerdefiniert", + "usb_device_custom": "Brauch", "usb_device_description": "USB-Geräte zum Emulieren auf dem Zielcomputer", "usb_device_enable_absolute_mouse_description": "Absolute Maus (Zeiger) aktivieren", "usb_device_enable_absolute_mouse_title": "Absolute Maus (Zeiger) aktivieren", @@ -815,13 +815,13 @@ "video_contrast_description": "Kontraststufe ( {value} x)", "video_contrast_title": "Kontrast", "video_custom_edid_description": "EDID gibt die Kompatibilität des Videomodus an. Die Standardeinstellungen funktionieren in den meisten Fällen, aber individuelle UEFI/BIOS-Einstellungen müssen möglicherweise angepasst werden.", - "video_custom_edid_title": "Eigene EDID", + "video_custom_edid_title": "Benutzerdefinierte EDID", "video_debugging_info_description": "Debugging-Informationen für Videos", "video_debugging_info_title": "Debugging-Informationen", "video_description": "Konfigurieren Sie Anzeigeeinstellungen und EDID für optimale Kompatibilität", "video_edid_acer_b246wl": "Acer B246WL, 1920x1200", "video_edid_asus_pa248qv": "ASUS PA248QV, 1920x1200", - "video_edid_custom": "Benutzerdefiniert", + "video_edid_custom": "Brauch", "video_edid_dell_d2721h": "DELL D2721H, 1920 x 1080", "video_edid_dell_idrac": "DELL IDRAC EDID, 1280x1024", "video_edid_description": "Passen Sie die EDID-Einstellungen für das Display an", @@ -837,7 +837,7 @@ "video_failed_set_stream_quality": "Fehler beim Festlegen der Streamqualität: {error}", "video_get_debugging_info": "Debugging-Informationen abrufen", "video_overlay_autoplay_permissions_required": "Autoplay-Berechtigungen erforderlich", - "video_overlay_conn_check_cables": "Überprüfen Sie alle Kabelverbindungen auf lockere oder beschädigte Kabel", + "video_overlay_conn_check_cables": "Überprüfen Sie alle Kabelverbindungen auf lose oder beschädigte Drähte", "video_overlay_conn_ensure_network": "Stellen Sie sicher, dass Ihre Netzwerkverbindung stabil und aktiv ist", "video_overlay_conn_restart": "Versuchen Sie, sowohl das Gerät als auch Ihren Computer neu zu starten", "video_overlay_conn_verify_power": "Stellen Sie sicher, dass das Gerät eingeschaltet und richtig angeschlossen ist", @@ -845,7 +845,7 @@ "video_overlay_enable_autoplay_settings": "Bitte passen Sie die Browsereinstellungen an, um die automatische Wiedergabe zu aktivieren", "video_overlay_hdmi_error_title": "HDMI-Signalfehler erkannt.", "video_overlay_hdmi_incompatible_resolution": "Inkompatible Auflösungs- oder Bildwiederholfrequenzeinstellungen", - "video_overlay_hdmi_loose_faulty": "Lose oder fehlerhafte HDMI-Verbindung", + "video_overlay_hdmi_loose_faulty": "Eine lose oder fehlerhafte HDMI-Verbindung", "video_overlay_hdmi_source_issue": "Probleme mit dem HDMI-Ausgang des Quellgeräts", "video_overlay_learn_more": "Mehr erfahren", "video_overlay_loading_stream": "Videostream wird geladen …", @@ -855,12 +855,6 @@ "video_overlay_no_hdmi_ensure_power": "Stellen Sie sicher, dass das Quellgerät eingeschaltet ist und ein Signal ausgibt", "video_overlay_no_hdmi_signal": "Kein HDMI-Signal erkannt.", "video_overlay_pointerlock_click_to_enable": "Klicken Sie auf das Video, um die Maussteuerung zu aktivieren", - "video_overlay_reboot_device_is_rebooting": "Das Gerät wird neu gestartet", - "video_overlay_reboot_different_ip_message": "Das Gerät wurde möglicherweise mit einer anderen IP-Adresse neu gestartet. Überprüfen Sie die physische Anzeige des JetKVM, um die aktuelle IP-Adresse zu ermitteln und die Verbindung wiederherzustellen.", - "video_overlay_reboot_please_wait_message": "Bitte warten Sie, während das Gerät neu gestartet wird. Dies dauert normalerweise 20–30 Sekunden.", - "video_overlay_reboot_timeout_message": "Zeitüberschreitung bei der automatischen Wiederverbindung", - "video_overlay_reboot_unable_to_reconnect": "Verbindung konnte nicht wiederhergestellt werden", - "video_overlay_reboot_waiting_for_restart": "Warten auf den Neustart des Geräts …", "video_overlay_retrying_connection": "Verbindung wird erneut versucht …", "video_overlay_troubleshooting_guide": "Handbuch zur Fehlerbehebung", "video_overlay_try_again": "Versuchen Sie es erneut", @@ -869,7 +863,7 @@ "video_quality_high": "Hoch", "video_quality_low": "Niedrig", "video_quality_medium": "Medium", - "video_reset_to_default": "Auf Werkseinstellungen zurücksetzen", + "video_reset_to_default": "Auf Standard zurücksetzen", "video_restore_to_default": "Auf Standard zurücksetzen", "video_saturation_description": "Farbsättigung ( {value} x)", "video_saturation_title": "Sättigung", diff --git a/ui/localization/messages/en.json b/ui/localization/messages/en.json index 0356e8e5..c8a5c0b7 100644 --- a/ui/localization/messages/en.json +++ b/ui/localization/messages/en.json @@ -242,6 +242,7 @@ "general_auto_update_error": "Failed to set auto-update: {error}", "general_auto_update_title": "Auto Update", "general_check_for_updates": "Check for Updates", + "general_check_for_stable_updates": "Downgrade", "general_page_description": "Configure device settings and update preferences", "general_reboot_description": "Do you want to proceed with rebooting the system?", "general_reboot_device": "Reboot Device", @@ -855,12 +856,6 @@ "video_overlay_no_hdmi_ensure_power": "Ensure source device is powered on and outputting a signal", "video_overlay_no_hdmi_signal": "No HDMI signal detected.", "video_overlay_pointerlock_click_to_enable": "Click on the video to enable mouse control", - "video_overlay_reboot_device_is_rebooting": "Device is Rebooting", - "video_overlay_reboot_different_ip_message": "The device may have restarted with a different IP address. Check the JetKVM's physical display to find the current IP address and reconnect.", - "video_overlay_reboot_please_wait_message": "Please wait while the device restarts. This usually takes 20-30 seconds.", - "video_overlay_reboot_timeout_message": "Automatic Reconnection Timed Out", - "video_overlay_reboot_unable_to_reconnect": "Unable to Reconnect", - "video_overlay_reboot_waiting_for_restart": "Waiting for device to restart…", "video_overlay_retrying_connection": "Retrying connection…", "video_overlay_troubleshooting_guide": "Troubleshooting Guide", "video_overlay_try_again": "Try again", @@ -897,5 +892,30 @@ "wake_on_lan_invalid_mac": "Invalid MAC address", "wake_on_lan_magic_sent_success": "Magic Packet sent successfully", "welcome_to_jetkvm": "Welcome to JetKVM", - "welcome_to_jetkvm_description": "Control any computer remotely" + "welcome_to_jetkvm_description": "Control any computer remotely", + "advanced_version_update_app_label": "App Version", + "advanced_version_update_button": "Update to Version", + "advanced_version_update_description": "Install a specific version from GitHub releases", + "advanced_version_update_github_link": "JetKVM releases page", + "advanced_version_update_helper": "Find available versions on the", + "advanced_version_update_system_label": "System Version", + "advanced_version_update_target_app": "App only", + "advanced_version_update_target_both": "Both App and System", + "advanced_version_update_target_label": "What to update", + "advanced_version_update_target_system": "System only", + "advanced_version_update_title": "Update to Specific Version", + "advanced_error_version_update": "Failed to initiate version update: {error}", + "general_update_downgrade_available_description": "A downgrade is available to revert to a previous version.", + "general_update_downgrade_available_title": "Downgrade Available", + "general_update_downgrade_button": "Downgrade Now", + "general_update_keep_current_button": "Keep Current Version", + "advanced_version_update_reset_config_description": "Reset configuration after the update", + "advanced_version_update_reset_config_label": "Reset configuration", + "connection_stats_remote_ip_address": "Remote IP Address", + "connection_stats_remote_ip_address_description": "The IP address of the remote device.", + "connection_stats_remote_ip_address_copy_error": "Failed to copy remote IP address", + "connection_stats_remote_ip_address_copy_success": "Remote IP address { ip } copied to clipboard", + "public_ip_card_header": "Public IP addresses", + "public_ip_card_refresh": "Refresh", + "public_ip_card_refresh_error": "Failed to refresh public IP addresses: {error}" } diff --git a/ui/localization/messages/es.json b/ui/localization/messages/es.json index a74e35ec..c482bfdc 100644 --- a/ui/localization/messages/es.json +++ b/ui/localization/messages/es.json @@ -1,7 +1,7 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", - "access_adopt_kvm": "Vincular KVM con la nube", - "access_adopted_message": "Su dispositivo está vinculado a la nube", + "access_adopt_kvm": "Adopte KVM en la nube", + "access_adopted_message": "Su dispositivo está adoptado en la Nube", "access_auth_mode_no_password": "Modo actual: Sin contraseña", "access_auth_mode_password": "Modo actual: Protegido con contraseña", "access_authentication_mode_title": "Modo de autenticación", @@ -9,29 +9,29 @@ "access_change_password_button": "Cambiar la contraseña", "access_change_password_description": "Actualice la contraseña de acceso a su dispositivo", "access_change_password_title": "Cambiar la contraseña", - "access_cloud_api_url_label": "URL de la API de Cloud", - "access_cloud_app_url_label": "URL de la aplicación Cloud", + "access_cloud_api_url_label": "URL de la API de la nube", + "access_cloud_app_url_label": "URL de la aplicación en la nube", "access_cloud_provider_description": "Seleccione el proveedor de nube para su dispositivo", "access_cloud_provider_title": "Proveedor de la nube", "access_cloud_security_title": "Seguridad en la nube", "access_confirm_deregister": "¿Está seguro de que desea cancelar el registro de este dispositivo?", "access_deregister": "Darse de baja de la nube", - "access_description": "Administre el control de acceso del dispositivo", - "access_disable_protection": "Desactivar la protección", - "access_enable_password": "Activar contraseña", + "access_description": "Gestionar el Control de Acceso del dispositivo", + "access_disable_protection": "Desactivar protección", + "access_enable_password": "Habilitar contraseña", "access_failed_deregister": "No se pudo cancelar el registro del dispositivo: {error}", "access_failed_update_cloud_url": "No se pudo actualizar la URL de la nube: {error}", "access_failed_update_tls": "No se pudo actualizar la configuración de TLS: {error}", "access_github_link": "GitHub", "access_https_description": "Configurar el acceso HTTPS seguro a su dispositivo", "access_https_mode_title": "Modo HTTPS", - "access_learn_security": "Más información sobre nuestra seguridad en la nube", + "access_learn_security": "Conozca nuestra seguridad en la nube", "access_local_description": "Administrar el modo de acceso local al dispositivo", "access_local_title": "Local", "access_no_device_id": "No hay ningún ID de dispositivo disponible", "access_private_key_description": "Por razones de seguridad, no se mostrará después de guardar.", "access_private_key_label": "Clave privada", - "access_provider_custom": "Personalizado", + "access_provider_custom": "Costumbre", "access_provider_jetkvm": "Nube JetKVM", "access_remote_description": "Administrar el modo de acceso remoto al dispositivo", "access_security_encryption": "Cifrado de extremo a extremo mediante WebRTC (DTLS y SRTP)", @@ -42,7 +42,7 @@ "access_title": "Acceso", "access_tls_certificate_description": "Pegue su certificado TLS a continuación. Para las cadenas de certificados, incluya la cadena completa (certificados hoja, intermedios y raíz).", "access_tls_certificate_title": "Certificado TLS", - "access_tls_custom": "Personalizado", + "access_tls_custom": "Costumbre", "access_tls_disabled": "Desactivado", "access_tls_self_signed": "Autofirmado", "access_tls_updated": "La configuración de TLS se actualizó correctamente", @@ -155,7 +155,7 @@ "back": "Atrás", "back_to_devices": "Volver a Dispositivos", "cancel": "Cancelar", - "close": "Cerrar", + "close": "Cerca", "cloud_kvms": "KVM en la nube", "cloud_kvms_description": "Administre sus KVM en la nube y conéctese a ellos de forma segura.", "cloud_kvms_no_devices": "No se encontraron dispositivos", @@ -164,8 +164,8 @@ "connect_to_kvm": "Conectarse a KVM", "connecting_to_device": "Conectando al dispositivo…", "connection_established": "Conexión establecida", - "connection_stats_badge_jitter": "Jitter", - "connection_stats_badge_jitter_buffer_avg_delay": "Retraso medio del búfer de jitter", + "connection_stats_badge_jitter": "Estar nervioso", + "connection_stats_badge_jitter_buffer_avg_delay": "Retardo promedio del búfer de fluctuación", "connection_stats_connection": "Conexión", "connection_stats_connection_description": "La conexión entre el cliente y JetKVM.", "connection_stats_frames_per_second": "Fotogramas por segundo", @@ -201,7 +201,7 @@ "dc_power_control_set_restore_state_error": "No se pudo enviar el estado de restauración de energía de CC a {state} : {error}", "dc_power_control_voltage": "Voltaje", "dc_power_control_voltage_unit": "V", - "delete": "Eliminar", + "delete": "Borrar", "deregister_cloud_devices": "Dispositivos en la nube", "deregister_description": "Esto eliminará el dispositivo de su cuenta en la nube y revocará el acceso remoto. Tenga en cuenta que el acceso local seguirá siendo posible.", "deregister_error": "Se produjo un error {status} al cancelar el registro de su dispositivo. Inténtelo de nuevo.", @@ -245,7 +245,7 @@ "general_page_description": "Configurar los ajustes del dispositivo y actualizar las preferencias", "general_reboot_description": "¿Desea continuar con el reinicio del sistema?", "general_reboot_device": "Reiniciar el dispositivo", - "general_reboot_device_description": "Reinicie el JetKVM", + "general_reboot_device_description": "Apague y encienda el JetKVM", "general_reboot_no_button": "No", "general_reboot_title": "Reiniciar JetKVM", "general_reboot_yes_button": "Sí", @@ -256,15 +256,15 @@ "general_update_available_description": "Hay una nueva actualización disponible para mejorar el rendimiento del sistema y la compatibilidad. Recomendamos actualizar para garantizar un funcionamiento fluido.", "general_update_available_title": "Actualización disponible", "general_update_background_button": "Actualización en segundo plano", - "general_update_check_again_button": "Comprobar de nuevo", + "general_update_check_again_button": "Revisalo de nuevo", "general_update_checking_description": "Nos aseguramos de que su dispositivo tenga las últimas funciones y mejoras.", "general_update_checking_title": "Buscando actualizaciones…", "general_update_completed_description": "Tu dispositivo se ha actualizado correctamente a la última versión. ¡Disfruta de las nuevas funciones y mejoras!", - "general_update_completed_title": "Actualización completada con éxito", + "general_update_completed_title": "Actualización completada exitosamente", "general_update_error_description": "Se produjo un error al actualizar tu dispositivo. Inténtalo de nuevo más tarde.", "general_update_error_details": "Detalles del error: {errorMessage}", "general_update_error_title": "Error de actualización", - "general_update_later_button": "Posponer", + "general_update_later_button": "Hazlo más tarde", "general_update_now_button": "Actualizar ahora", "general_update_rebooting": "Reiniciando para completar la actualización…", "general_update_status_awaiting_reboot": "Esperando reinicio", @@ -299,7 +299,7 @@ "hardware_display_orientation_title": "Orientación de la pantalla", "hardware_display_wake_up_note": "La pantalla se activará cuando cambie el estado de la conexión o cuando se toque.", "hardware_page_description": "Configure los ajustes de pantalla y las opciones de hardware para su dispositivo JetKVM", - "hardware_power_saving_description": "Reduce el consumo de energía cuando el dispositivo no esté en uso", + "hardware_power_saving_description": "Reduce el consumo de energía cuando no esté en uso", "hardware_power_saving_disabled": "Modo de ahorro de energía deshabilitado", "hardware_power_saving_enabled": "Modo de ahorro de energía habilitado", "hardware_power_saving_failed_error": "No se pudo establecer el modo de ahorro de energía: {error}", @@ -315,7 +315,7 @@ "hardware_title": "Hardware", "hardware_turn_off_display_after_description": "Periodo de inactividad antes de que la pantalla se apague automáticamente", "hardware_turn_off_display_after_title": "Apagar la pantalla después", - "hide": "Ocultar", + "hide": "Esconder", "ice_gathering_completed": "Reunión de ICE completada", "info_caps_lock": "Bloq Mayús", "info_compose": "Componer", @@ -365,14 +365,14 @@ "keyboard_layout_error": "No se pudo establecer la distribución del teclado: {error}", "keyboard_layout_long_description": "El teclado virtual, la función de pegar texto y las macros de teclado envían pulsaciones de teclas individuales al dispositivo de destino. La distribución del teclado determina qué códigos de tecla se envían. Asegúrese de que la distribución del teclado en JetKVM coincida con la configuración del sistema operativo.", "keyboard_layout_success": "La distribución del teclado se ha establecido correctamente en {layout}", - "keyboard_layout_title": "Distribución del teclado", + "keyboard_layout_title": "Disposición del teclado", "keyboard_show_pressed_keys_description": "Mostrar las teclas presionadas actualmente en la barra de estado", "keyboard_show_pressed_keys_title": "Mostrar teclas presionadas", "keyboard_title": "Teclado", "kvm_terminal": "Terminal KVM", "last_online": "Última conexión {time}", "learn_more": "Más información", - "load": "Cargar", + "load": "Carga", "loading": "Cargando…", "local_auth_change_local_device_password_description": "Ingrese su contraseña actual y una nueva contraseña para actualizar la protección de su dispositivo local.", "local_auth_change_local_device_password_title": "Cambiar la contraseña del dispositivo local", @@ -443,12 +443,12 @@ "macro_step_duration_description": "Tiempo de espera antes de ejecutar el siguiente paso.", "macro_step_duration_label": "Duración del paso", "macro_step_keys_description": "Máximo de {max} claves por paso.", - "macro_step_keys_label": "Teclas", + "macro_step_keys_label": "Llaves", "macro_step_max_keys_reached": "Se alcanzó el máximo de claves", "macro_step_modifiers_description": "¿Qué modificadores (Shift/Ctrl/Alt/Meta) se presionan durante este paso?", "macro_step_modifiers_label": "Modificadores", "macro_step_no_matching_keys_found": "No se encontraron claves coincidentes", - "macro_step_search_for_key": "Buscar tecla…", + "macro_step_search_for_key": "Buscar clave…", "macro_steps_description": "Teclas/modificadores que se ejecutan en secuencia con un retraso entre cada paso.", "macro_steps_label": "Pasos", "macros_add_description": "Crear una nueva macro de teclado", @@ -508,7 +508,7 @@ "mount_button_upload_new_image": "Subir una nueva imagen", "mount_bytes_free": "{bytesFree} libre", "mount_bytes_used": "{bytesUsed} usado", - "mount_calculating": "Calculando…", + "mount_calculating": "Calculador…", "mount_click_to_select_file": "Haga clic para seleccionar un archivo", "mount_click_to_select_incomplete": "Haga clic para seleccionar \" {name} \"", "mount_confirm_delete": "¿Estás seguro de que deseas eliminar {name} ?", @@ -557,24 +557,24 @@ "mount_virtual_media_source_description": "Elige cómo quieres montar tus medios virtuales", "mouse_alt_finger": "Dedo tocando una pantalla", "mouse_alt_mouse": "Icono del ratón", - "mouse_description": "Configure el comportamiento del cursor y las opciones de interacción del dispositivo", + "mouse_description": "Configure el comportamiento del cursor y los ajustes de interacción para su dispositivo", "mouse_hide_cursor_description": "Ocultar el cursor al enviar movimientos del mouse", "mouse_hide_cursor_title": "Ocultar el cursor", "mouse_jiggler_config_updated": "La configuración de Jiggler se actualizó correctamente", - "mouse_jiggler_custom": "Personalizado", + "mouse_jiggler_custom": "Costumbre", "mouse_jiggler_description": "Simular el movimiento de un ratón de ordenador", "mouse_jiggler_disabled": "Desactivado", "mouse_jiggler_error_config": "Se produjo un error al configurar el jiggler.", "mouse_jiggler_failed_state": "No se pudo establecer el estado del jiggler: {error}", "mouse_jiggler_frequent": "Frecuente - 30s", "mouse_jiggler_invalid_cron": "Expresión cron no válida. Verifique el formato de su programación (p. ej., '0 * * * * *' para cada minuto).", - "mouse_jiggler_light": "Ligero - 5 min", + "mouse_jiggler_light": "Luz - 5m", "mouse_jiggler_standard": "Estándar - 1 m", "mouse_jiggler_title": "Jiggler", "mouse_mode_absolute": "Absoluto", - "mouse_mode_absolute_description": "Más preciso", + "mouse_mode_absolute_description": "Lo más conveniente", "mouse_mode_relative": "Relativo", - "mouse_mode_relative_description": "Más compatible con sistemas antiguos", + "mouse_mode_relative_description": "Más compatible", "mouse_modes_description": "Elija el modo de entrada del mouse", "mouse_modes_title": "Modos", "mouse_scroll_high": "Alto", @@ -582,11 +582,11 @@ "mouse_scroll_medium": "Medio", "mouse_scroll_off": "Apagado", "mouse_scroll_throttling_description": "Reducir la frecuencia de los eventos de desplazamiento", - "mouse_scroll_throttling_title": "Regulación del desplazamiento", + "mouse_scroll_throttling_title": "Limitación de desplazamiento", "mouse_scroll_very_high": "Muy alto", "mouse_title": "Ratón", "network_custom_domain": "Dominio personalizado", - "network_description": "Configure los ajustes de red", + "network_description": "Configurar sus ajustes de red", "network_dhcp_client_description": "Configurar qué cliente DHCP utilizar", "network_dhcp_client_jetkvm": "JetKVM interno", "network_dhcp_client_title": "Cliente DHCP", @@ -596,7 +596,7 @@ "network_dhcp_lease_renew_confirm_new_b": "Es posible que necesites volver a conectarte usando la nueva dirección", "network_dhcp_lease_renew_failed": "No se pudo renovar el contrato de arrendamiento: {error}", "network_dhcp_lease_renew_success": "Se renovó la concesión de DHCP", - "network_domain_custom": "Personalizado", + "network_domain_custom": "Costumbre", "network_domain_description": "Sufijo de dominio de red para el dispositivo", "network_domain_dhcp_provided": "DHCP proporcionado", "network_domain_local": ".local", @@ -636,7 +636,7 @@ "network_ipv6_prefix_invalid": "El prefijo debe estar entre 0 y 128", "network_ll_dp_all": "Todo", "network_ll_dp_basic": "Básico", - "network_ll_dp_description": "Controla qué TLV se enviarán mediante LLDP (Protocolo de descubrimiento de capa de enlace)", + "network_ll_dp_description": "Controlar qué TLV se enviarán a través del Protocolo de descubrimiento de capa de enlace", "network_ll_dp_disabled": "Desactivado", "network_ll_dp_title": "LLDP", "network_mac_address_copy_error": "No se pudo copiar la dirección MAC", @@ -671,11 +671,11 @@ "network_time_sync_title": "Sincronización horaria", "network_title": "Red", "never_seen_online": "Nunca visto en línea", - "next": "Siguiente", + "next": "Próximo", "no_results_found": "No se encontraron resultados", "not_applicable": "N / A", "not_available": "N / A", - "not_found": "No encontrado", + "not_found": "Extraviado", "ntp_servers": "Servidores NTP", "oh_no": "¡Oh, no!", "online": "En línea", @@ -714,8 +714,8 @@ "rename_device_new_name_label": "Nuevo nombre del dispositivo", "rename_device_new_name_placeholder": "Servidor multimedia Plex", "rename_device_no_name": "Por favor especifique un nombre", - "retry": "Reintentar", - "saving": "Guardando…", + "retry": "Rever", + "saving": "Ahorro…", "search_placeholder": "Buscar…", "serial_console": "Consola serial", "serial_console_baud_rate": "Tasa de Baud", @@ -752,7 +752,7 @@ "time_division_hours": "horas", "time_division_minutes": "minutos", "time_division_months": "meses", - "time_division_seconds": "segundos", + "time_division_seconds": "artículos de segunda clase", "time_division_weeks": "semanas", "time_division_years": "años", "troubleshoot_connection": "Solucionar problemas de conexión", @@ -830,7 +830,7 @@ "video_edid_set_success": "EDID establecido correctamente en {edid}", "video_edid_title": "EDID", "video_enhancement_description": "Ajuste la configuración de color para que la salida de video sea más vibrante y colorida.", - "video_enhancement_title": "Mejoras de vídeo", + "video_enhancement_title": "Mejora de vídeo", "video_failed_get_debug_info": "No se pudo obtener la información de depuración: {error}", "video_failed_get_edid": "No se pudo obtener el EDID: {error}", "video_failed_set_edid": "No se pudo establecer EDID: {error}", @@ -839,7 +839,7 @@ "video_overlay_autoplay_permissions_required": "Se requieren permisos de reproducción automática", "video_overlay_conn_check_cables": "Revise todas las conexiones de cables para detectar cables sueltos o dañados.", "video_overlay_conn_ensure_network": "Asegúrese de que su conexión de red sea estable y activa", - "video_overlay_conn_restart": "Intente reiniciar el dispositivo y el ordenador", + "video_overlay_conn_restart": "Intente reiniciar tanto el dispositivo como su computadora", "video_overlay_conn_verify_power": "Verifique que el dispositivo esté encendido y conectado correctamente", "video_overlay_connection_issue_title": "Problema de conexión detectado", "video_overlay_enable_autoplay_settings": "Ajuste la configuración del navegador para habilitar la reproducción automática.", @@ -855,12 +855,6 @@ "video_overlay_no_hdmi_ensure_power": "Asegúrese de que el dispositivo fuente esté encendido y emitiendo una señal", "video_overlay_no_hdmi_signal": "No se detectó señal HDMI.", "video_overlay_pointerlock_click_to_enable": "Haga clic en el vídeo para habilitar el control del mouse.", - "video_overlay_reboot_device_is_rebooting": "El dispositivo se está reiniciando", - "video_overlay_reboot_different_ip_message": "Es posible que el dispositivo se haya reiniciado con una dirección IP diferente. Revise la pantalla física del JetKVM para encontrar la dirección IP actual y volver a conectarlo.", - "video_overlay_reboot_please_wait_message": "Espere mientras el dispositivo se reinicia. Suele tardar entre 20 y 30 segundos.", - "video_overlay_reboot_timeout_message": "Tiempo de reconexión automática agotado", - "video_overlay_reboot_unable_to_reconnect": "No se puede reconectar", - "video_overlay_reboot_waiting_for_restart": "Esperando que el dispositivo se reinicie…", "video_overlay_retrying_connection": "Reintentando conexión…", "video_overlay_troubleshooting_guide": "Guía de solución de problemas", "video_overlay_try_again": "Intentar otra vez", diff --git a/ui/localization/messages/fr.json b/ui/localization/messages/fr.json index eb7361d1..47813da9 100644 --- a/ui/localization/messages/fr.json +++ b/ui/localization/messages/fr.json @@ -25,13 +25,13 @@ "access_github_link": "GitHub", "access_https_description": "Configurer un accès HTTPS sécurisé à votre appareil", "access_https_mode_title": "Mode HTTPS", - "access_learn_security": "En savoir plus sur la sécurité cloud", + "access_learn_security": "En savoir plus sur notre sécurité cloud", "access_local_description": "Gérer le mode d'accès local à l'appareil", - "access_local_title": "Local", + "access_local_title": "Locale", "access_no_device_id": "Aucun identifiant d'appareil disponible", "access_private_key_description": "Pour des raisons de sécurité, il ne sera pas affiché après l'enregistrement.", "access_private_key_label": "Clé privée", - "access_provider_custom": "Personnalisé", + "access_provider_custom": "Coutume", "access_provider_jetkvm": "JetKVM Cloud", "access_remote_description": "Gérer le mode d'accès à distance à l'appareil", "access_security_encryption": "Chiffrement de bout en bout utilisant WebRTC (DTLS et SRTP)", @@ -42,7 +42,7 @@ "access_title": "Accéder", "access_tls_certificate_description": "Collez votre certificat TLS ci-dessous. Pour les chaînes de certificats, incluez la chaîne complète (certificats feuille, intermédiaire et racine).", "access_tls_certificate_title": "Certificat TLS", - "access_tls_custom": "Personnalisé", + "access_tls_custom": "Coutume", "access_tls_disabled": "Désactivé", "access_tls_self_signed": "Auto-signé", "access_tls_updated": "Les paramètres TLS ont été mis à jour avec succès", @@ -79,7 +79,7 @@ "advanced_loopback_warning_before": "Avant d'activer cette fonctionnalité, assurez-vous d'avoir :", "advanced_loopback_warning_cloud": "Accès au cloud activé et fonctionnel", "advanced_loopback_warning_confirm": "Je comprends, j'active quand même", - "advanced_loopback_warning_description": "Avertissement : cela restreindra l'accès à l'interface Web à localhost (127.0.0.1) uniquement.", + "advanced_loopback_warning_description": "AVERTISSEMENT : cela restreindra l'accès à l'interface Web à localhost (127.0.0.1) uniquement.", "advanced_loopback_warning_ssh": "Accès SSH configuré et testé", "advanced_loopback_warning_title": "Activer le mode de bouclage uniquement ?", "advanced_reset_config_button": "Réinitialiser la configuration", @@ -108,14 +108,14 @@ "appearance_page_description": "Personnalisez l'apparence de votre interface JetKVM", "appearance_theme": "Thème", "appearance_theme_dark": "Sombre", - "appearance_theme_light": "Clair", + "appearance_theme_light": "Lumière", "appearance_theme_system": "Système", "appearance_title": "Apparence", "attach": "Attacher", "atx_power_control_get_state_error": "Échec de l'obtention de l'état d'alimentation ATX : {error}", "atx_power_control_hdd_led": "Voyant du disque dur", "atx_power_control_long_power_button": "Appui long", - "atx_power_control_power_button": "Alimentation", + "atx_power_control_power_button": "Pouvoir", "atx_power_control_power_led": "LED d'alimentation", "atx_power_control_reset_button": "Réinitialiser", "atx_power_control_send_action_error": "Échec de l'envoi de l'action d'alimentation ATX {action} : {error}", @@ -152,7 +152,7 @@ "auth_signup_create_account": "Créez votre compte JetKVM", "auth_signup_create_account_action": "Créer un compte", "auth_signup_create_account_description": "Créez votre compte et commencez à gérer vos appareils en toute simplicité.", - "back": "Retour", + "back": "Dos", "back_to_devices": "Retour aux appareils", "cancel": "Annuler", "close": "Fermer", @@ -187,9 +187,9 @@ "continue": "Continuer", "creating_peer_connection": "Créer des liens entre pairs…", "dc_power_control_current": "Actuel", - "dc_power_control_current_unit": "A", + "dc_power_control_current_unit": "UN", "dc_power_control_get_state_error": "Échec de l'obtention de l'état d'alimentation CC : {error}", - "dc_power_control_power": "Alimentation", + "dc_power_control_power": "Pouvoir", "dc_power_control_power_off_button": "Éteindre", "dc_power_control_power_off_state": "Éteindre", "dc_power_control_power_on_button": "Mise sous tension", @@ -215,7 +215,7 @@ "dhcp_lease_boot_server_name": "Nom du serveur de démarrage", "dhcp_lease_broadcast": "Diffuser", "dhcp_lease_domain": "Domaine", - "dhcp_lease_gateway": "Passerelle", + "dhcp_lease_gateway": "Porte", "dhcp_lease_header": "Informations sur le bail DHCP", "dhcp_lease_hostname": "Nom d'hôte", "dhcp_lease_lease_expires": "Le bail expire", @@ -264,7 +264,7 @@ "general_update_error_description": "Une erreur s'est produite lors de la mise à jour de votre appareil. Veuillez réessayer ultérieurement.", "general_update_error_details": "Détails de l'erreur : {errorMessage}", "general_update_error_title": "Erreur de mise à jour", - "general_update_later_button": "Faire plus tard", + "general_update_later_button": "Fais-le plus tard", "general_update_now_button": "Mettre à jour maintenant", "general_update_rebooting": "Redémarrage pour terminer la mise à jour…", "general_update_status_awaiting_reboot": "En attente de redémarrage", @@ -279,7 +279,7 @@ "general_update_up_to_date_title": "Le système est à jour", "general_update_updating_description": "Veuillez ne pas éteindre votre appareil. Ce processus peut prendre quelques minutes.", "general_update_updating_title": "Mise à jour de votre appareil", - "getting_remote_session_description": "Obtention d'{attempt} description de session à distance", + "getting_remote_session_description": "Obtention d' {attempt} description de session à distance", "hardware_backlight_settings_error": "Échec de la définition des paramètres de rétroéclairage : {error}", "hardware_backlight_settings_get_error": "Échec de l'obtention des paramètres de rétroéclairage : {error}", "hardware_backlight_settings_success": "Les paramètres de rétroéclairage ont été mis à jour avec succès", @@ -294,7 +294,7 @@ "hardware_display_orientation_description": "Définir l'orientation de l'affichage", "hardware_display_orientation_error": "Échec de la définition de l'orientation d'affichage : {error}", "hardware_display_orientation_inverted": "Inversé", - "hardware_display_orientation_normal": "Normal", + "hardware_display_orientation_normal": "Normale", "hardware_display_orientation_success": "L'orientation de l'affichage a été mise à jour avec succès", "hardware_display_orientation_title": "Orientation de l'affichage", "hardware_display_wake_up_note": "L'écran se réveille lorsque l'état de connexion change ou lorsqu'il est touché.", @@ -315,30 +315,30 @@ "hardware_title": "Matériel", "hardware_turn_off_display_after_description": "Période d'inactivité avant que l'écran ne s'éteigne automatiquement", "hardware_turn_off_display_after_title": "Désactiver l'affichage après", - "hide": "Masquer", + "hide": "Cacher", "ice_gathering_completed": "Rassemblement ICE terminé", "info_caps_lock": "Verrouillage des majuscules", "info_compose": "Composer", "info_hdmi_state": "État HDMI :", "info_hidrpc_state": "État HidRPC :", "info_kana": "Kana", - "info_keys": "Clés :", + "info_keys": "Clés:", "info_last_move": "Dernier mouvement :", "info_num_lock": "Verr Num", "info_paste_enabled": "Activé", "info_paste_mode": "Mode Coller :", - "info_pointer": "Pointeur :", + "info_pointer": "Aiguille:", "info_relayed_by_cloudflare": "Relayé par Cloudflare", - "info_resolution": "Résolution :", + "info_resolution": "Résolution:", "info_scroll_lock": "Verrouillage du défilement", - "info_shift": "Maj", + "info_shift": "Changement", "info_usb_state": "État USB :", "info_video_size": "Taille de la vidéo :", "input_disabled": "Entrée désactivée", "invalid_password": "Mot de passe invalide", "ip_address": "Adresse IP", "ipv6_address_label": "Adresse", - "ipv6_gateway": "Passerelle", + "ipv6_gateway": "Porte", "ipv6_information": "Informations IPv6", "ipv6_link_local": "Lien local", "ipv6_preferred_lifetime": "Durée de vie préférée", @@ -354,7 +354,7 @@ "jiggler_examples_label": "Exemples", "jiggler_inactivity_limit_description": "Temps d'inactivité avant le tremblement", "jiggler_inactivity_limit_label": "Limite d'inactivité en secondes", - "jiggler_more_examples": "Voir plus d'exemples", + "jiggler_more_examples": "Plus d'exemples", "jiggler_random_delay_description": "Pour éviter les modèles reconnaissables", "jiggler_random_delay_label": "Délai aléatoire", "jiggler_save_jiggler_config": "Enregistrer la configuration de Jiggler", @@ -371,7 +371,7 @@ "keyboard_title": "Clavier", "kvm_terminal": "Terminal KVM", "last_online": "Dernière connexion {time}", - "learn_more": "En savoir plus", + "learn_more": "Apprendre encore plus", "load": "Charger", "loading": "Chargement…", "local_auth_change_local_device_password_description": "Saisissez votre mot de passe actuel et un nouveau mot de passe pour mettre à jour la protection de votre appareil local.", @@ -381,8 +381,8 @@ "local_auth_create_description": "Créez un mot de passe pour protéger votre appareil contre tout accès local non autorisé.", "local_auth_create_new_password_label": "Nouveau mot de passe", "local_auth_create_new_password_placeholder": "Entrez un mot de passe fort", - "local_auth_create_not_now_button": "Plus tard", - "local_auth_create_secure_button": "Sécuriser l'appareil", + "local_auth_create_not_now_button": "Pas maintenant", + "local_auth_create_secure_button": "Appareil sécurisé", "local_auth_create_title": "Protection des périphériques locaux", "local_auth_current_password_label": "Mot de passe actuel", "local_auth_disable_local_device_protection_description": "Saisissez votre mot de passe actuel pour désactiver la protection de l'appareil local.", @@ -407,16 +407,16 @@ "local_auth_success_password_updated_description": "Vous avez modifié avec succès le mot de passe de protection de votre appareil local. N'oubliez pas de le mémoriser pour y accéder ultérieurement.", "local_auth_success_password_updated_title": "Mot de passe mis à jour avec succès", "local_auth_update_password_button": "Mettre à jour le mot de passe", - "locale_auto": "Automatique", + "locale_auto": "Auto", "locale_change_success": "La langue a été modifiée avec succès en {locale}", - "locale_da": "Danois", + "locale_da": "danois", "locale_de": "Allemand", "locale_en": "Anglais", "locale_es": "Espagnol", "locale_fr": "Français", - "locale_it": "Italien", + "locale_it": "italien", "locale_nb": "Norvégien (bokmål)", - "locale_sv": "Suédois", + "locale_sv": "suédois", "locale_zh": "中文 (简体)", "log_in": "Se connecter", "log_out": "Se déconnecter", @@ -424,7 +424,7 @@ "login_enter_password": "Entrez votre mot de passe", "login_enter_password_description": "Entrez votre mot de passe pour accéder à votre JetKVM.", "login_error": "Une erreur s'est produite lors de la connexion", - "login_forgot_password": "Mot de passe oublié ?", + "login_forgot_password": "Mot de passe oublié?", "login_password_label": "Mot de passe", "login_welcome_back": "Bienvenue à JetKVM", "macro_add_step": "Ajouter l'étape {maxed_out}", @@ -508,7 +508,7 @@ "mount_button_upload_new_image": "Télécharger une nouvelle image", "mount_bytes_free": "{bytesFree} gratuit", "mount_bytes_used": "{bytesUsed} utilisé", - "mount_calculating": "Calcul en cours…", + "mount_calculating": "Calculateur…", "mount_click_to_select_file": "Cliquez pour sélectionner un fichier", "mount_click_to_select_incomplete": "Cliquez pour sélectionner « {name} »", "mount_confirm_delete": "Êtes-vous sûr de vouloir supprimer {name} ?", @@ -561,15 +561,15 @@ "mouse_hide_cursor_description": "Masquer le curseur lors de l'envoi de mouvements de souris", "mouse_hide_cursor_title": "Masquer le curseur", "mouse_jiggler_config_updated": "Configuration de Jiggler mise à jour avec succès", - "mouse_jiggler_custom": "Personnalisé", + "mouse_jiggler_custom": "Coutume", "mouse_jiggler_description": "Simuler le mouvement d'une souris d'ordinateur", "mouse_jiggler_disabled": "Désactivé", "mouse_jiggler_error_config": "Une erreur s'est produite lors de la configuration du jiggler", "mouse_jiggler_failed_state": "Échec de la définition de l'état du jiggler : {error}", "mouse_jiggler_frequent": "Fréquent - 30 s", "mouse_jiggler_invalid_cron": "Expression cron non valide. Veuillez vérifier le format de votre planification (par exemple, « 0 * * * * * » pour chaque minute).", - "mouse_jiggler_light": "Léger - 5m", - "mouse_jiggler_standard": "Standard - 1 m", + "mouse_jiggler_light": "Lumière - 5m", + "mouse_jiggler_standard": "Norme - 1 m", "mouse_jiggler_title": "Jiggler", "mouse_mode_absolute": "Absolu", "mouse_mode_absolute_description": "Le plus pratique", @@ -582,7 +582,7 @@ "mouse_scroll_medium": "Moyen", "mouse_scroll_off": "Désactivé", "mouse_scroll_throttling_description": "Réduire la fréquence des événements de défilement", - "mouse_scroll_throttling_title": "Ralentissement du défilement", + "mouse_scroll_throttling_title": "Limitation du défilement", "mouse_scroll_very_high": "Très élevé", "mouse_title": "Souris", "network_custom_domain": "Domaine personnalisé", @@ -596,10 +596,10 @@ "network_dhcp_lease_renew_confirm_new_b": "vous devrez peut-être vous reconnecter en utilisant la nouvelle adresse", "network_dhcp_lease_renew_failed": "Échec du renouvellement du bail : {error}", "network_dhcp_lease_renew_success": "Renouvellement du bail DHCP", - "network_domain_custom": "Personnalisé", + "network_domain_custom": "Coutume", "network_domain_description": "Suffixe de domaine réseau pour l'appareil", "network_domain_dhcp_provided": "DHCP fourni", - "network_domain_local": ".local", + "network_domain_local": ".locale", "network_domain_title": "Domaine", "network_hostname_description": "Identifiant de l'appareil sur le réseau. Vide pour la valeur par défaut du système.", "network_hostname_title": "Nom d'hôte", @@ -619,7 +619,7 @@ "network_ipv6_addresses_header": "Adresses IPv6", "network_ipv6_cidr_suggestion": "Veuillez utiliser la notation CIDR (par exemple, 2001:db8::1/64)", "network_ipv6_dns": "DNS IPv6", - "network_ipv6_flag_dad_failed": "DAD a échoué", + "network_ipv6_flag_dad_failed": "Papa a échoué", "network_ipv6_flag_deprecated": "Obsolète", "network_ipv6_gateway": "Passerelle IPv6", "network_ipv6_information": "Informations IPv6", @@ -636,14 +636,14 @@ "network_ipv6_prefix_invalid": "Le préfixe doit être compris entre 0 et 128", "network_ll_dp_all": "Tous", "network_ll_dp_basic": "Basique", - "network_ll_dp_description": "Contrôler les TLV qui seront envoyés via le protocole Link Layer Discovery Protocol", + "network_ll_dp_description": "Contrôler les TLV qui seront envoyés via le protocole Link Layer Discovery", "network_ll_dp_disabled": "Désactivé", "network_ll_dp_title": "LLDP", "network_mac_address_copy_error": "Échec de la copie de l'adresse MAC", - "network_mac_address_copy_success": "Adresse MAC {mac} copiée dans le presse-papiers", + "network_mac_address_copy_success": "Adresse MAC { mac } copiée dans le presse-papiers", "network_mac_address_description": "Identifiant matériel de l'interface réseau", "network_mac_address_title": "Adresse MAC", - "network_mdns_auto": "Automatique", + "network_mdns_auto": "Auto", "network_mdns_description": "Contrôler le mode opérationnel mDNS (DNS multicast)", "network_mdns_disabled": "Désactivé", "network_mdns_ipv4_only": "IPv4 uniquement", @@ -677,7 +677,7 @@ "not_available": "N / A", "not_found": "Non trouvé", "ntp_servers": "Serveurs NTP", - "oh_no": "Oh non !", + "oh_no": "Oh non!", "online": "En ligne", "other_session_detected": "Une autre session active détectée", "other_session_take_over": " Une seule session active est prise en charge à la fois. Souhaitez-vous prendre le contrôle de cette session ?", @@ -693,13 +693,13 @@ "paste_text": "Coller du texte", "paste_text_description": "Collez le texte de votre client sur l'hôte distant", "peer_connection_closed": "Fermé", - "peer_connection_closing": "Fermeture", + "peer_connection_closing": "Clôture", "peer_connection_connected": "Connecté", - "peer_connection_connecting": "Connexion", + "peer_connection_connecting": "De liaison", "peer_connection_disconnected": "Déconnecté", "peer_connection_error": "Erreur de connexion", "peer_connection_failed": "La connexion a échoué", - "peer_connection_new": "Nouveau", + "peer_connection_new": "De liaison", "previous": "Précédent", "register_device_error": "Une erreur {error} s'est produite lors de l'enregistrement de votre appareil.", "register_device_finish_button": "Terminer la configuration", @@ -715,7 +715,7 @@ "rename_device_new_name_placeholder": "Serveur multimédia Plex", "rename_device_no_name": "Veuillez spécifier un nom", "retry": "Réessayer", - "saving": "Enregistrement…", + "saving": "Économie…", "search_placeholder": "Rechercher…", "serial_console": "Console série", "serial_console_baud_rate": "Débit en bauds", @@ -732,8 +732,8 @@ "serial_console_set_settings_error": "Échec de la définition des paramètres de la console série sur {settings} : {error}", "serial_console_stop_bits": "Bits d'arrêt", "setting_remote_description": "Description de la télécommande", - "setting_remote_session_description": "Définition de la description de la session à distance…", - "setting_up_connection_to_device": "Configuration de la connexion à l'appareil…", + "setting_remote_session_description": "Définition de la description de la session à distance...", + "setting_up_connection_to_device": "Configuration de la connexion à l'appareil...", "settings_access": "Accéder", "settings_advanced": "Avancé", "settings_appearance": "Apparence", @@ -762,7 +762,7 @@ "updates_failed_get_device_version": "Échec de l'obtention de la version de l'appareil : {error}", "updating_leave_device_on": "S'il vous plaît, n'éteignez pas votre appareil…", "usb": "USB", - "usb_config_custom": "Personnalisé", + "usb_config_custom": "Coutume", "usb_config_default": "JetKVM par défaut", "usb_config_dell": "Clavier Dell Multimedia Pro", "usb_config_failed_load": "Échec du chargement de la configuration USB : {error}", @@ -785,8 +785,8 @@ "usb_config_vendor_id_label": "ID du fournisseur", "usb_config_vendor_id_placeholder": "Entrez l'ID du fournisseur", "usb_device_classes_description": "Classes de périphériques USB dans le périphérique composite", - "usb_device_classes_title": "Classes", - "usb_device_custom": "Personnalisé", + "usb_device_classes_title": "Cours", + "usb_device_custom": "Coutume", "usb_device_description": "Périphériques USB à émuler sur l'ordinateur cible", "usb_device_enable_absolute_mouse_description": "Activer la souris absolue (pointeur)", "usb_device_enable_absolute_mouse_title": "Activer la souris absolue (pointeur)", @@ -821,7 +821,7 @@ "video_description": "Configurer les paramètres d'affichage et l'EDID pour une compatibilité optimale", "video_edid_acer_b246wl": "Acer B246WL, 1920x1200", "video_edid_asus_pa248qv": "ASUS PA248QV, 1920x1200", - "video_edid_custom": "Personnalisé", + "video_edid_custom": "Coutume", "video_edid_dell_d2721h": "DELL D2721H, 1920x1080", "video_edid_dell_idrac": "DELL IDRAC EDID, 1280x1024", "video_edid_description": "Ajuster les paramètres EDID pour l'affichage", @@ -847,7 +847,7 @@ "video_overlay_hdmi_incompatible_resolution": "Paramètres de résolution ou de taux de rafraîchissement incompatibles", "video_overlay_hdmi_loose_faulty": "Une connexion HDMI lâche ou défectueuse", "video_overlay_hdmi_source_issue": "Problèmes avec la sortie HDMI de l'appareil source", - "video_overlay_learn_more": "En savoir plus", + "video_overlay_learn_more": "Apprendre encore plus", "video_overlay_loading_stream": "Chargement du flux vidéo…", "video_overlay_manually_start_stream": "Démarrer le flux manuellement", "video_overlay_no_hdmi_adapter_compat": "Si vous utilisez un adaptateur, assurez-vous qu'il est compatible et qu'il fonctionne correctement", @@ -855,12 +855,6 @@ "video_overlay_no_hdmi_ensure_power": "Assurez-vous que l'appareil source est sous tension et émet un signal", "video_overlay_no_hdmi_signal": "Aucun signal HDMI détecté.", "video_overlay_pointerlock_click_to_enable": "Cliquez sur la vidéo pour activer le contrôle de la souris", - "video_overlay_reboot_device_is_rebooting": "L'appareil redémarre", - "video_overlay_reboot_different_ip_message": "L'appareil a peut-être redémarré avec une adresse IP différente. Vérifiez l'écran physique du JetKVM pour trouver l'adresse IP actuelle et reconnectez-vous.", - "video_overlay_reboot_please_wait_message": "Veuillez patienter pendant le redémarrage de l'appareil. Cela prend généralement 20 à 30 secondes.", - "video_overlay_reboot_timeout_message": "Délai de reconnexion automatique expiré", - "video_overlay_reboot_unable_to_reconnect": "Impossible de se reconnecter", - "video_overlay_reboot_waiting_for_restart": "En attente du redémarrage de l'appareil…", "video_overlay_retrying_connection": "Nouvelle tentative de connexion…", "video_overlay_troubleshooting_guide": "Guide de dépannage", "video_overlay_try_again": "Essayer à nouveau", diff --git a/ui/localization/messages/it.json b/ui/localization/messages/it.json index b2aa5529..0135203d 100644 --- a/ui/localization/messages/it.json +++ b/ui/localization/messages/it.json @@ -1,37 +1,37 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", - "access_adopt_kvm": "Collega KVM al Cloud", - "access_adopted_message": "Il tuo dispositivo è stato collegato al Cloud", + "access_adopt_kvm": "Adotta KVM nel cloud", + "access_adopted_message": "Il tuo dispositivo è adottato nel Cloud", "access_auth_mode_no_password": "Modalità corrente: Nessuna password", "access_auth_mode_password": "Modalità corrente: protetta da password", "access_authentication_mode_title": "Modalità di autenticazione", "access_certificate_label": "Certificato", - "access_change_password_button": "Cambia password", + "access_change_password_button": "Cambiare la password", "access_change_password_description": "Aggiorna la password di accesso al tuo dispositivo", - "access_change_password_title": "Cambia password", + "access_change_password_title": "Cambiare la password", "access_cloud_api_url_label": "URL dell'API cloud", "access_cloud_app_url_label": "URL dell'applicazione cloud", "access_cloud_provider_description": "Seleziona il provider cloud per il tuo dispositivo", "access_cloud_provider_title": "Fornitore di servizi cloud", - "access_cloud_security_title": "Sicurezza Cloud", + "access_cloud_security_title": "Sicurezza del cloud", "access_confirm_deregister": "Sei sicuro di voler annullare la registrazione di questo dispositivo?", "access_deregister": "Annulla la registrazione dal cloud", - "access_description": "Gestisci il controllo degli accessi del dispositivo", - "access_disable_protection": "Disattiva la protezione", - "access_enable_password": "Attiva password", + "access_description": "Gestire il controllo degli accessi del dispositivo", + "access_disable_protection": "Disattiva protezione", + "access_enable_password": "Abilita password", "access_failed_deregister": "Impossibile annullare la registrazione del dispositivo: {error}", "access_failed_update_cloud_url": "Impossibile aggiornare l'URL del cloud: {error}", "access_failed_update_tls": "Impossibile aggiornare le impostazioni TLS: {error}", "access_github_link": "GitHub", "access_https_description": "Configura l'accesso HTTPS sicuro al tuo dispositivo", "access_https_mode_title": "Modalità HTTPS", - "access_learn_security": "Scopri di più sulla sicurezza Cloud", + "access_learn_security": "Scopri di più sulla nostra sicurezza cloud", "access_local_description": "Gestire la modalità di accesso locale al dispositivo", "access_local_title": "Locale", "access_no_device_id": "Nessun ID dispositivo disponibile", "access_private_key_description": "Per motivi di sicurezza, non verrà visualizzato dopo il salvataggio.", "access_private_key_label": "Chiave privata", - "access_provider_custom": "Personalizzato", + "access_provider_custom": "Costume", "access_provider_jetkvm": "JetKVM Cloud", "access_remote_description": "Gestire la modalità di accesso remoto al dispositivo", "access_security_encryption": "Crittografia end-to-end tramite WebRTC (DTLS e SRTP)", @@ -42,8 +42,8 @@ "access_title": "Accesso", "access_tls_certificate_description": "Incolla il tuo certificato TLS qui sotto. Per le catene di certificati, includi l'intera catena (certificati foglia, intermedi e radice).", "access_tls_certificate_title": "Certificato TLS", - "access_tls_custom": "Personalizzato", - "access_tls_disabled": "Disattivato", + "access_tls_custom": "Costume", + "access_tls_disabled": "Disabili", "access_tls_self_signed": "Autofirmato", "access_tls_updated": "Impostazioni TLS aggiornate correttamente", "access_update_tls_settings": "Aggiorna le impostazioni TLS", @@ -105,13 +105,13 @@ "already_adopted_return_to_dashboard": "Torna alla dashboard", "already_adopted_title": "Dispositivo già registrato", "appearance_description": "Scegli il tuo tema colore preferito", - "appearance_page_description": "Personalizza l'aspetto e il tema dell'interfaccia JetKVM", + "appearance_page_description": "Personalizza l'aspetto e le funzionalità della tua interfaccia JetKVM", "appearance_theme": "Tema", - "appearance_theme_dark": "Scuro", - "appearance_theme_light": "Chiaro", + "appearance_theme_dark": "Buio", + "appearance_theme_light": "Leggero", "appearance_theme_system": "Sistema", "appearance_title": "Aspetto", - "attach": "Allega", + "attach": "Allegare", "atx_power_control_get_state_error": "Impossibile ottenere lo stato di alimentazione ATX: {error}", "atx_power_control_hdd_led": "LED dell'HDD", "atx_power_control_long_power_button": "Pressione lunga", @@ -130,7 +130,7 @@ "auth_header_cta_dont_have_account": "Non hai un account?", "auth_header_cta_new_to_jetkvm": "Nuovo su JetKVM?", "auth_login": "Accedi al tuo account JetKVM", - "auth_login_action": "Accedi", + "auth_login_action": "Login", "auth_login_description": "Accedi per accedere e gestire i tuoi dispositivi in modo sicuro", "auth_mode_local": "Metodo di autenticazione locale", "auth_mode_local_change_later": "Potrai sempre modificare il metodo di autenticazione in un secondo momento nelle impostazioni.", @@ -150,17 +150,17 @@ "auth_mode_local_password_set_label": "Inserisci una password", "auth_signup_connect_to_cloud_action": "Registrati e connetti il dispositivo", "auth_signup_create_account": "Crea il tuo account JetKVM", - "auth_signup_create_account_action": "Crea account", + "auth_signup_create_account_action": "Creare un account", "auth_signup_create_account_description": "Crea il tuo account e inizia a gestire i tuoi dispositivi con facilità.", "back": "Indietro", "back_to_devices": "Torna ai dispositivi", - "cancel": "Annulla", - "close": "Chiudi", + "cancel": "Cancellare", + "close": "Vicino", "cloud_kvms": "KVM cloud", "cloud_kvms_description": "Gestisci i tuoi KVM cloud e connettiti ad essi in modo sicuro.", "cloud_kvms_no_devices": "Nessun dispositivo trovato", "cloud_kvms_no_devices_description": "Non hai ancora alcun dispositivo con JetKVM Cloud abilitato.", - "confirm": "Conferma", + "confirm": "Confermare", "connect_to_kvm": "Connettiti a KVM", "connecting_to_device": "Connessione al dispositivo…", "connection_established": "Connessione stabilita", @@ -184,7 +184,7 @@ "connection_stats_unit_packets": " pacchetti", "connection_stats_video": "Video", "connection_stats_video_description": "Il flusso video dal JetKVM al client.", - "continue": "Continua", + "continue": "Continuare", "creating_peer_connection": "Creazione di una connessione tra pari…", "dc_power_control_current": "Attuale", "dc_power_control_current_unit": "UN", @@ -201,7 +201,7 @@ "dc_power_control_set_restore_state_error": "Impossibile inviare lo stato di ripristino dell'alimentazione CC a {state} : {error}", "dc_power_control_voltage": "Voltaggio", "dc_power_control_voltage_unit": "V", - "delete": "Elimina", + "delete": "Eliminare", "deregister_cloud_devices": "Dispositivi cloud", "deregister_description": "Questo rimuoverà il dispositivo dal tuo account cloud e ne revocherà l'accesso remoto. Tieni presente che l'accesso locale sarà comunque possibile.", "deregister_error": "Si è verificato un errore {status} durante l'annullamento della registrazione del dispositivo. Riprova.", @@ -241,21 +241,21 @@ "general_auto_update_description": "Aggiorna automaticamente il dispositivo all'ultima versione", "general_auto_update_error": "Impossibile impostare l'aggiornamento automatico: {error}", "general_auto_update_title": "Aggiornamento automatico", - "general_check_for_updates": "Verifica aggiornamenti", + "general_check_for_updates": "Controlla gli aggiornamenti", "general_page_description": "Configurare le impostazioni del dispositivo e aggiornare le preferenze", "general_reboot_description": "Vuoi procedere con il riavvio del sistema?", "general_reboot_device": "Riavvia il dispositivo", "general_reboot_device_description": "Spegnere e riaccendere JetKVM", - "general_reboot_no_button": "No", + "general_reboot_no_button": "NO", "general_reboot_title": "Riavviare JetKVM", - "general_reboot_yes_button": "Sì", + "general_reboot_yes_button": "SÌ", "general_system_version": "Sistema: {version}", "general_title": "Generale", "general_update_app_update_title": "Aggiornamento dell'app", "general_update_application_type": "Applicazione", "general_update_available_description": "È disponibile un nuovo aggiornamento per migliorare le prestazioni del sistema e la compatibilità. Consigliamo di effettuare l'aggiornamento per garantire il corretto funzionamento di tutto.", "general_update_available_title": "Aggiornamento disponibile", - "general_update_background_button": "Aggiorna in background", + "general_update_background_button": "Aggiornamento in background", "general_update_check_again_button": "Ricontrollare", "general_update_checking_description": "Ci assicuriamo che il tuo dispositivo abbia le funzionalità e i miglioramenti più recenti.", "general_update_checking_title": "Controllo degli aggiornamenti…", @@ -286,8 +286,8 @@ "hardware_dim_display_after_description": "Imposta il tempo di attesa prima di oscurare il display", "hardware_dim_display_after_title": "Display scuro dopo", "hardware_display_brightness_description": "Imposta la luminosità del display", - "hardware_display_brightness_high": "Alta", - "hardware_display_brightness_low": "Bassa", + "hardware_display_brightness_high": "Alto", + "hardware_display_brightness_low": "Basso", "hardware_display_brightness_medium": "Medio", "hardware_display_brightness_off": "Spento", "hardware_display_brightness_title": "Luminosità dello schermo", @@ -296,10 +296,10 @@ "hardware_display_orientation_inverted": "Invertito", "hardware_display_orientation_normal": "Normale", "hardware_display_orientation_success": "Orientamento del display aggiornato correttamente", - "hardware_display_orientation_title": "Orientamento del display", + "hardware_display_orientation_title": "Orientamento dello schermo", "hardware_display_wake_up_note": "Il display si riattiverà quando cambia lo stato della connessione o quando viene toccato.", "hardware_page_description": "Configura le impostazioni di visualizzazione e le opzioni hardware per il tuo dispositivo JetKVM", - "hardware_power_saving_description": "Riduce il consumo energetico quando il dispositivo non è in uso", + "hardware_power_saving_description": "Ridurre il consumo energetico quando non in uso", "hardware_power_saving_disabled": "Modalità di risparmio energetico disabilitata", "hardware_power_saving_enabled": "Modalità di risparmio energetico abilitata", "hardware_power_saving_failed_error": "Impossibile impostare la modalità di risparmio energetico: {error}", @@ -372,7 +372,7 @@ "kvm_terminal": "Terminale KVM", "last_online": "Ultimo accesso {time}", "learn_more": "Saperne di più", - "load": "Carica", + "load": "Carico", "loading": "Caricamento…", "local_auth_change_local_device_password_description": "Inserisci la tua password attuale e una nuova password per aggiornare la protezione del tuo dispositivo locale.", "local_auth_change_local_device_password_title": "Cambia la password del dispositivo locale", @@ -419,12 +419,12 @@ "locale_sv": "Svedese", "locale_zh": "中文 (简体)", "log_in": "Login", - "log_out": "Esci", - "logged_in_as": "Accesso come", + "log_out": "Disconnetti", + "logged_in_as": "Accedi come", "login_enter_password": "Inserisci la tua password", "login_enter_password_description": "Inserisci la tua password per accedere al tuo JetKVM.", "login_error": "Si è verificato un errore durante l'accesso", - "login_forgot_password": "Hai dimenticato la password?", + "login_forgot_password": "Ha dimenticato la password?", "login_password_label": "Password", "login_welcome_back": "Bentornati a JetKVM", "macro_add_step": "Aggiungi passaggio {maxed_out}", @@ -439,7 +439,7 @@ "macro_save": "Salva macro", "macro_save_failed": "Si è verificato un errore durante il salvataggio.", "macro_save_failed_error": "Si è verificato un errore durante il salvataggio: {error}.", - "macro_step_count": "{steps} / {max} passaggi", + "macro_step_count": "{steps} / {max} steps", "macro_step_duration_description": "Tempo di attesa prima di eseguire il passaggio successivo.", "macro_step_duration_label": "Durata del passo", "macro_step_keys_description": "Numero massimo di chiavi {max} per passaggio.", @@ -453,7 +453,7 @@ "macro_steps_label": "Passi", "macros_add_description": "Crea una nuova macro della tastiera", "macros_add_new": "Aggiungi nuova macro", - "macros_add_new_macro": "Crea nuova macro", + "macros_add_new_macro": "Aggiungi nuova macro", "macros_aria_add_new": "Aggiungi nuova macro", "macros_aria_delete": "Elimina macro {name}", "macros_aria_duplicate": "Macro duplicata {name}", @@ -472,7 +472,7 @@ "macros_deleted_success": "Macro \" {name} \" eliminata con successo", "macros_deleting": "Eliminazione", "macros_duplicated_success": "Macro \" {name} \" duplicata correttamente", - "macros_edit_button": "Modifica", + "macros_edit_button": "Modificare", "macros_edit_description": "Modifica la macro della tastiera", "macros_edit_title": "Modifica macro", "macros_failed_create": "Impossibile creare la macro", @@ -491,7 +491,7 @@ "macros_maximum_macros_reached": "Hai raggiunto il numero massimo di {maximum} consentite.", "macros_no_macros_available": "Nessuna macro disponibile", "macros_order_updated": "Ordine macro aggiornato con successo", - "macros_title": "Macro tastiera", + "macros_title": "Macro della tastiera", "macros_updated_success": "Macro \" {name} \" aggiornata con successo", "metric_not_supported": "Metrica non supportata", "metric_waiting_for_data": "In attesa di dati…", @@ -561,14 +561,14 @@ "mouse_hide_cursor_description": "Nascondi il cursore quando invii i movimenti del mouse", "mouse_hide_cursor_title": "Nascondi cursore", "mouse_jiggler_config_updated": "Configurazione di Jiggler aggiornata con successo", - "mouse_jiggler_custom": "Personalizzato", + "mouse_jiggler_custom": "Costume", "mouse_jiggler_description": "Simula il movimento del mouse di un computer", - "mouse_jiggler_disabled": "Disattivato", + "mouse_jiggler_disabled": "Disabili", "mouse_jiggler_error_config": "Si è verificato un errore durante l'impostazione della configurazione di Jiggler", "mouse_jiggler_failed_state": "Impossibile impostare lo stato del jiggler: {error}", "mouse_jiggler_frequent": "Frequente - 30s", "mouse_jiggler_invalid_cron": "Espressione cron non valida. Controlla il formato della tua pianificazione (ad esempio, '0 * * * * *' per ogni minuto).", - "mouse_jiggler_light": "Leggero - 5m", + "mouse_jiggler_light": "Luce - 5m", "mouse_jiggler_standard": "Standard - 1m", "mouse_jiggler_title": "Jiggler", "mouse_mode_absolute": "Assoluto", @@ -584,7 +584,7 @@ "mouse_scroll_throttling_description": "Ridurre la frequenza degli eventi di scorrimento", "mouse_scroll_throttling_title": "Limitazione dello scorrimento", "mouse_scroll_very_high": "Molto alto", - "mouse_title": "Mouse", + "mouse_title": "Topo", "network_custom_domain": "Dominio personalizzato", "network_description": "Configura le impostazioni di rete", "network_dhcp_client_description": "Configurare quale client DHCP utilizzare", @@ -596,12 +596,12 @@ "network_dhcp_lease_renew_confirm_new_b": "potrebbe essere necessario riconnettersi utilizzando il nuovo indirizzo", "network_dhcp_lease_renew_failed": "Impossibile rinnovare il contratto di locazione: {error}", "network_dhcp_lease_renew_success": "Rinnovo del contratto di locazione DHCP", - "network_domain_custom": "Personalizzato", + "network_domain_custom": "Costume", "network_domain_description": "Suffisso del dominio di rete per il dispositivo", "network_domain_dhcp_provided": "DHCP fornito", "network_domain_local": ".locale", "network_domain_title": "Dominio", - "network_hostname_description": "Identificatore del dispositivo sulla rete. Lascia vuoto per usare il valore predefinito di sistema.", + "network_hostname_description": "Identificatore del dispositivo sulla rete. Vuoto per impostazione predefinita del sistema", "network_hostname_title": "Nome host", "network_http_proxy_description": "Server proxy per le richieste HTTP(S) in uscita dal dispositivo. Vuoto per nessuna richiesta.", "network_http_proxy_invalid": "URL proxy HTTP non valido", @@ -626,7 +626,7 @@ "network_ipv6_invalid": "Indirizzo IPv6 non valido", "network_ipv6_mode_description": "Configurare la modalità IPv6", "network_ipv6_mode_dhcpv6": "DHCPv6", - "network_ipv6_mode_disabled": "Disattivato", + "network_ipv6_mode_disabled": "Disabili", "network_ipv6_mode_link_local": "Solo collegamento locale", "network_ipv6_mode_slaac": "SLAAC", "network_ipv6_mode_slaac_dhcpv6": "SLAAC + DHCPv6", @@ -637,7 +637,7 @@ "network_ll_dp_all": "Tutto", "network_ll_dp_basic": "Di base", "network_ll_dp_description": "Controlla quali TLV verranno inviati tramite Link Layer Discovery Protocol", - "network_ll_dp_disabled": "Disattivato", + "network_ll_dp_disabled": "Disabili", "network_ll_dp_title": "LLDP", "network_mac_address_copy_error": "Impossibile copiare l'indirizzo MAC", "network_mac_address_copy_success": "Indirizzo MAC { mac } copiato negli appunti", @@ -645,7 +645,7 @@ "network_mac_address_title": "Indirizzo MAC", "network_mdns_auto": "Auto", "network_mdns_description": "Controlla la modalità operativa mDNS (DNS multicast)", - "network_mdns_disabled": "Disattivato", + "network_mdns_disabled": "Disabili", "network_mdns_ipv4_only": "Solo IPv4", "network_mdns_ipv6_only": "Solo IPv6", "network_mdns_title": "mDNS", @@ -671,7 +671,7 @@ "network_time_sync_title": "Sincronizzazione oraria", "network_title": "Rete", "never_seen_online": "Mai visto online", - "next": "Avanti", + "next": "Prossimo", "no_results_found": "Nessun risultato trovato", "not_applicable": "N / A", "not_available": "N / A", @@ -715,7 +715,7 @@ "rename_device_new_name_placeholder": "Server multimediale Plex", "rename_device_no_name": "Si prega di specificare un nome", "retry": "Riprova", - "saving": "Salvataggio in corso…", + "saving": "Risparmio…", "search_placeholder": "Ricerca…", "serial_console": "Console seriale", "serial_console_baud_rate": "Velocità in baud", @@ -741,8 +741,8 @@ "settings_general": "Generale", "settings_hardware": "Hardware", "settings_keyboard": "Tastiera", - "settings_keyboard_macros": "Macro tastiera", - "settings_mouse": "Mouse", + "settings_keyboard_macros": "Macro della tastiera", + "settings_mouse": "Topo", "settings_network": "Rete", "settings_video": "Video", "something_went_wrong": "Qualcosa è andato storto. Riprova più tardi o contatta l'assistenza.", @@ -762,7 +762,7 @@ "updates_failed_get_device_version": "Impossibile ottenere la versione del dispositivo: {error}", "updating_leave_device_on": "Per favore, non spegnere il tuo dispositivo…", "usb": "USB", - "usb_config_custom": "Personalizzato", + "usb_config_custom": "Costume", "usb_config_default": "JetKVM predefinito", "usb_config_dell": "Tastiera Dell Multimedia Pro", "usb_config_failed_load": "Impossibile caricare la configurazione USB: {error}", @@ -781,19 +781,19 @@ "usb_config_serial_number_label": "Numero di serie", "usb_config_serial_number_placeholder": "Inserisci il numero di serie", "usb_config_set_success": "Configurazione USB impostata su {manufacturer} {product}", - "usb_config_update_identifiers": "Aggiorna identificatori USB", + "usb_config_update_identifiers": "Aggiorna gli identificatori USB", "usb_config_vendor_id_label": "ID fornitore", "usb_config_vendor_id_placeholder": "Inserisci l'ID del fornitore", "usb_device_classes_description": "Classi di dispositivi USB nel dispositivo composito", "usb_device_classes_title": "Classi", - "usb_device_custom": "Personalizzato", + "usb_device_custom": "Costume", "usb_device_description": "Dispositivi USB da emulare sul computer di destinazione", "usb_device_enable_absolute_mouse_description": "Abilita mouse assoluto (puntatore)", "usb_device_enable_absolute_mouse_title": "Abilita mouse assoluto (puntatore)", "usb_device_enable_keyboard_description": "Abilita tastiera", "usb_device_enable_keyboard_title": "Abilita tastiera", "usb_device_enable_mass_storage_description": "A volte potrebbe essere necessario disattivarlo per evitare problemi con determinati dispositivi", - "usb_device_enable_mass_storage_title": "Abilita memoria di massa USB", + "usb_device_enable_mass_storage_title": "Abilita archiviazione di massa USB", "usb_device_enable_relative_mouse_description": "Abilita mouse relativo", "usb_device_enable_relative_mouse_title": "Abilita mouse relativo", "usb_device_failed_load": "Impossibile caricare i dispositivi USB: {error}", @@ -821,7 +821,7 @@ "video_description": "Configurare le impostazioni di visualizzazione e EDID per una compatibilità ottimale", "video_edid_acer_b246wl": "Acer B246WL, 1920x1200", "video_edid_asus_pa248qv": "ASUS PA248QV, 1920x1200", - "video_edid_custom": "Personalizzato", + "video_edid_custom": "Costume", "video_edid_dell_d2721h": "DELL D2721H, 1920x1080", "video_edid_dell_idrac": "DELL IDRAC EDID, 1280x1024", "video_edid_description": "Regola le impostazioni EDID per il display", @@ -840,7 +840,7 @@ "video_overlay_conn_check_cables": "Controllare tutti i collegamenti dei cavi per eventuali fili allentati o danneggiati", "video_overlay_conn_ensure_network": "Assicurati che la tua connessione di rete sia stabile e attiva", "video_overlay_conn_restart": "Prova a riavviare sia il dispositivo che il computer", - "video_overlay_conn_verify_power": "Assicurati che il dispositivo sia acceso e correttamente collegato", + "video_overlay_conn_verify_power": "Verificare che il dispositivo sia acceso e correttamente collegato", "video_overlay_connection_issue_title": "Problema di connessione rilevato", "video_overlay_enable_autoplay_settings": "Si prega di modificare le impostazioni del browser per abilitare la riproduzione automatica", "video_overlay_hdmi_error_title": "Rilevato errore del segnale HDMI.", @@ -855,12 +855,6 @@ "video_overlay_no_hdmi_ensure_power": "Assicurarsi che il dispositivo sorgente sia acceso e che emetta un segnale", "video_overlay_no_hdmi_signal": "Nessun segnale HDMI rilevato.", "video_overlay_pointerlock_click_to_enable": "Clicca sul video per abilitare il controllo del mouse", - "video_overlay_reboot_device_is_rebooting": "Il dispositivo si sta riavviando", - "video_overlay_reboot_different_ip_message": "Il dispositivo potrebbe essersi riavviato con un indirizzo IP diverso. Controllare il display fisico del JetKVM per trovare l'indirizzo IP corrente e riconnettersi.", - "video_overlay_reboot_please_wait_message": "Attendi il riavvio del dispositivo. Di solito ci vogliono 20-30 secondi.", - "video_overlay_reboot_timeout_message": "Riconnessione automatica scaduta", - "video_overlay_reboot_unable_to_reconnect": "Impossibile riconnettersi", - "video_overlay_reboot_waiting_for_restart": "In attesa del riavvio del dispositivo…", "video_overlay_retrying_connection": "Nuovo tentativo di connessione…", "video_overlay_troubleshooting_guide": "Guida alla risoluzione dei problemi", "video_overlay_try_again": "Riprova", diff --git a/ui/localization/messages/nb.json b/ui/localization/messages/nb.json index 26b8584e..514da26a 100644 --- a/ui/localization/messages/nb.json +++ b/ui/localization/messages/nb.json @@ -1,8 +1,8 @@ { "$schema": "https://inlang.com/schema/inlang-message-format", "access_adopt_kvm": "Ta i bruk KVM i skyen", - "access_adopted_message": "Enheten er koblet til skyen", - "access_auth_mode_no_password": "Gjeldende modus: Ingen passord", + "access_adopted_message": "Enheten din er tilpasset skyen", + "access_auth_mode_no_password": "Nåværende modus: Ingen passord", "access_auth_mode_password": "Gjeldende modus: Passordbeskyttet", "access_authentication_mode_title": "Autentiseringsmodus", "access_certificate_label": "Sertifikat", @@ -11,12 +11,12 @@ "access_change_password_title": "Endre passord", "access_cloud_api_url_label": "URL-adresse for Cloud API", "access_cloud_app_url_label": "URL-adresse for skyapplikasjon", - "access_cloud_provider_description": "Velg skyleverandør for enheten", + "access_cloud_provider_description": "Velg skyleverandøren for enheten din", "access_cloud_provider_title": "Skyleverandør", "access_cloud_security_title": "Skysikkerhet", "access_confirm_deregister": "Er du sikker på at du vil avregistrere denne enheten?", - "access_deregister": "Avregistrer fra skyen", - "access_description": "Administrer tilgang til enheten", + "access_deregister": "Avregistrer deg fra skyen", + "access_description": "Administrer tilgangskontrollen til enheten", "access_disable_protection": "Deaktiver beskyttelse", "access_enable_password": "Aktiver passord", "access_failed_deregister": "Kunne ikke avregistrere enheten: {error}", @@ -39,7 +39,7 @@ "access_security_open_source": "Alle skykomponenter er åpen kildekode og tilgjengelige på GitHub.", "access_security_streams": "Alle strømmer kryptert under overføring", "access_security_zero_trust": "Nulltillitssikkerhetsmodell", - "access_title": "Tilgang", + "access_title": "Adgang", "access_tls_certificate_description": "Lim inn TLS-sertifikatet ditt nedenfor. For sertifikatkjeder, inkluder hele kjeden (blad-, mellom- og rotsertifikater).", "access_tls_certificate_title": "TLS-sertifikat", "access_tls_custom": "Tilpasset", @@ -75,7 +75,7 @@ "advanced_error_usb_emulation_disable": "Kunne ikke deaktivere USB-emulering: {error}", "advanced_error_usb_emulation_enable": "Kunne ikke aktivere USB-emulering: {error}", "advanced_loopback_only_description": "Begrens tilgang til webgrensesnittet kun til lokal vert (127.0.0.1)", - "advanced_loopback_only_title": "Kun lokal tilgang", + "advanced_loopback_only_title": "Kun tilbakekoblingsmodus", "advanced_loopback_warning_before": "Før du aktiverer denne funksjonen, må du sørge for at du har enten:", "advanced_loopback_warning_cloud": "Skytilgang aktivert og fungerer", "advanced_loopback_warning_confirm": "Jeg forstår, aktiver uansett", @@ -84,7 +84,7 @@ "advanced_loopback_warning_title": "Aktivere kun tilbakekoblingsmodus?", "advanced_reset_config_button": "Tilbakestill konfigurasjon", "advanced_reset_config_description": "Tilbakestill konfigurasjonen til standard. Dette vil logge deg ut.", - "advanced_reset_config_title": "Tilbakestill innstillinger", + "advanced_reset_config_title": "Tilbakestill konfigurasjon", "advanced_ssh_access_description": "Legg til din offentlige SSH-nøkkel for å aktivere sikker ekstern tilgang til enheten", "advanced_ssh_access_title": "SSH-tilgang", "advanced_ssh_default_user": "Standard SSH-brukeren er", @@ -96,7 +96,7 @@ "advanced_success_update_ssh_key": "SSH-nøkkelen er oppdatert", "advanced_title": "Avansert", "advanced_troubleshooting_mode_description": "Diagnostiske verktøy og tilleggskontroller for feilsøking og utviklingsformål", - "advanced_troubleshooting_mode_title": "Feilsøkingsverktøy", + "advanced_troubleshooting_mode_title": "Feilsøkingsmodus", "advanced_update_ssh_key_button": "Oppdater SSH-nøkkel", "advanced_usb_emulation_description": "Kontroller USB-emuleringstilstanden", "advanced_usb_emulation_title": "USB-emulering", @@ -111,7 +111,7 @@ "appearance_theme_light": "Lys", "appearance_theme_system": "System", "appearance_title": "Utseende", - "attach": "Legg ved", + "attach": "Feste", "atx_power_control_get_state_error": "Klarte ikke å hente ATX-strømstatus: {error}", "atx_power_control_hdd_led": "HDD-LED", "atx_power_control_long_power_button": "Langt trykk", @@ -123,12 +123,12 @@ "auth_authentication_mode": "Vennligst velg en autentiseringsmodus", "auth_authentication_mode_error": "Det oppsto en feil under angivelse av autentiseringsmodus", "auth_authentication_mode_invalid": "Ugyldig autentiseringsmodus", - "auth_connect_to_cloud": "Koble JetKVM til skyen", + "auth_connect_to_cloud": "Koble JetKVM-en din til skyen", "auth_connect_to_cloud_action": "Logg inn og koble til enheten", "auth_connect_to_cloud_description": "Lås opp fjerntilgang og avanserte funksjoner for enheten din", "auth_header_cta_already_have_account": "Har du allerede en konto?", "auth_header_cta_dont_have_account": "Har du ikke en konto?", - "auth_header_cta_new_to_jetkvm": "Ny hos JetKVM?", + "auth_header_cta_new_to_jetkvm": "Ny bruker av JetKVM?", "auth_login": "Logg inn på JetKVM-kontoen din", "auth_login_action": "Logg inn", "auth_login_description": "Logg inn for å få tilgang til og administrere enhetene dine på en sikker måte", @@ -140,14 +140,14 @@ "auth_mode_local_password": "Passord", "auth_mode_local_password_confirm_description": "Bekreft passordet ditt", "auth_mode_local_password_confirm_label": "Bekreft passord", - "auth_mode_local_password_description": "Beskytt enheten med et passord.", + "auth_mode_local_password_description": "Sikre enheten din med et passord for ekstra beskyttelse.", "auth_mode_local_password_failed_set": "Klarte ikke å angi passord: {error}", "auth_mode_local_password_note": "Dette passordet vil bli brukt til å sikre enhetsdataene dine og beskytte mot uautorisert tilgang.", "auth_mode_local_password_note_local": "Alle dataene forblir på din lokale enhet.", "auth_mode_local_password_set": "Angi et passord", "auth_mode_local_password_set_button": "Angi passord", "auth_mode_local_password_set_description": "Opprett et sterkt passord for å sikre JetKVM-enheten din lokalt.", - "auth_mode_local_password_set_label": "Angi et passord", + "auth_mode_local_password_set_label": "Skriv inn et passord", "auth_signup_connect_to_cloud_action": "Registrer og koble til enhet", "auth_signup_create_account": "Opprett JetKVM-kontoen din", "auth_signup_create_account_action": "Opprett konto", @@ -160,7 +160,7 @@ "cloud_kvms_description": "Administrer skybaserte KVM-er og koble til dem sikkert.", "cloud_kvms_no_devices": "Ingen enheter funnet", "cloud_kvms_no_devices_description": "Du har ingen enheter med aktivert JetKVM Cloud ennå.", - "confirm": "Bekreft", + "confirm": "Bekrefte", "connect_to_kvm": "Koble til KVM", "connecting_to_device": "Kobler til enhet …", "connection_established": "Forbindelse opprettet", @@ -184,7 +184,7 @@ "connection_stats_unit_packets": " pakker", "connection_stats_video": "Video", "connection_stats_video_description": "Videostrømmen fra JetKVM til klienten.", - "continue": "Fortsett", + "continue": "Fortsette", "creating_peer_connection": "Oppretter kontakt med andre personer …", "dc_power_control_current": "Nåværende", "dc_power_control_current_unit": "EN", @@ -246,11 +246,11 @@ "general_reboot_description": "Vil du fortsette med å starte systemet på nytt?", "general_reboot_device": "Start enheten på nytt", "general_reboot_device_description": "Slå av og på JetKVM-en", - "general_reboot_no_button": "Nei", + "general_reboot_no_button": "Ingen", "general_reboot_title": "Start JetKVM på nytt", "general_reboot_yes_button": "Ja", "general_system_version": "System: {version}", - "general_title": "Generelt", + "general_title": "General", "general_update_app_update_title": "Appoppdatering", "general_update_application_type": "App", "general_update_available_description": "En ny oppdatering er tilgjengelig for å forbedre systemytelsen og kompatibiliteten. Vi anbefaler å oppdatere for å sikre at alt går knirkefritt.", @@ -264,7 +264,7 @@ "general_update_error_description": "Det oppsto en feil under oppdatering av enheten din. Prøv på nytt senere.", "general_update_error_details": "Feildetaljer: {errorMessage}", "general_update_error_title": "Oppdateringsfeil", - "general_update_later_button": "Oppdater senere", + "general_update_later_button": "Gjør det senere", "general_update_now_button": "Oppdater nå", "general_update_rebooting": "Starter på nytt for å fullføre oppdateringen …", "general_update_status_awaiting_reboot": "Venter på omstart", @@ -276,7 +276,7 @@ "general_update_system_type": "System", "general_update_system_update_title": "Linux-systemoppdatering", "general_update_up_to_date_description": "Systemet ditt kjører den nyeste versjonen. Ingen oppdateringer er tilgjengelige for øyeblikket.", - "general_update_up_to_date_title": "Alt er oppdatert", + "general_update_up_to_date_title": "Systemet er oppdatert", "general_update_updating_description": "Ikke slå av enheten. Denne prosessen kan ta noen minutter.", "general_update_updating_title": "Oppdaterer enheten din", "getting_remote_session_description": "Henter beskrivelse av ekstern øktforsøk {attempt}", @@ -372,7 +372,7 @@ "kvm_terminal": "KVM-terminal", "last_online": "Sist online {time}", "learn_more": "Lær mer", - "load": "Last inn", + "load": "Laste", "loading": "Laster inn…", "local_auth_change_local_device_password_description": "Skriv inn ditt nåværende passord og et nytt passord for å oppdatere den lokale enhetsbeskyttelsen.", "local_auth_change_local_device_password_title": "Endre passord for lokal enhet", @@ -427,7 +427,7 @@ "login_forgot_password": "Glemt passord?", "login_password_label": "Passord", "login_welcome_back": "Velkommen tilbake til JetKVM", - "macro_add_step": "Legg til trinn{maxed_out}", + "macro_add_step": "Legg til trinn {maxed_out}", "macro_at_least_one_step_keys_or_modifiers": "Minst ett trinn må ha nøkler eller modifikatorer", "macro_at_least_one_step_required": "Minst ett trinn er nødvendig", "macro_max_steps_error": "Du kan bare legge til maksimalt {max} trinn per makro.", @@ -472,7 +472,7 @@ "macros_deleted_success": "Makroen « {name} « ble slettet", "macros_deleting": "Sletter", "macros_duplicated_success": "Makroen « {name} « ble duplisert", - "macros_edit_button": "Rediger", + "macros_edit_button": "Redigere", "macros_edit_description": "Endre tastaturmakroen din", "macros_edit_title": "Rediger makro", "macros_failed_create": "Kunne ikke opprette makroen", @@ -488,7 +488,7 @@ "macros_invalid_data": "Ugyldige makrodata", "macros_loading": "Laster inn makroer …", "macros_max_reached": "Maks nådd", - "macros_maximum_macros_reached": "Du har nådd maksimalt antall makroer ({maximum}).", + "macros_maximum_macros_reached": "Du har nådd det maksimale antallet tillatte makroer {maximum}", "macros_no_macros_available": "Ingen makroer tilgjengelig", "macros_order_updated": "Makroordren er oppdatert", "macros_title": "Tastaturmakroer", @@ -573,8 +573,8 @@ "mouse_jiggler_title": "Jiggler", "mouse_mode_absolute": "Absolutt", "mouse_mode_absolute_description": "Mest praktisk", - "mouse_mode_relative": "Relativ", - "mouse_mode_relative_description": "Mest kompatibel", + "mouse_mode_relative": "Slektning", + "mouse_mode_relative_description": "Mest kompatible", "mouse_modes_description": "Velg museinndatamodus", "mouse_modes_title": "Moduser", "mouse_scroll_high": "Høy", @@ -598,7 +598,7 @@ "network_dhcp_lease_renew_success": "DHCP-leieavtale fornyet", "network_domain_custom": "Tilpasset", "network_domain_description": "Nettverksdomenesuffiks for enheten", - "network_domain_dhcp_provided": "Levert av DHCP", + "network_domain_dhcp_provided": "DHCP levert", "network_domain_local": ".lokal", "network_domain_title": "Domene", "network_hostname_description": "Enhetsidentifikator på nettverket. Blank for systemstandard", @@ -652,11 +652,11 @@ "network_no_information_description": "Ingen nettverkskonfigurasjon tilgjengelig", "network_no_information_headline": "Nettverksinformasjon", "network_pending_dhcp_mode_change_description": "Lagre innstillinger for å aktivere DHCP-modus og vise leieavtaleinformasjon", - "network_pending_dhcp_mode_change_headline": "Endring av DHCP-modus venter", + "network_pending_dhcp_mode_change_headline": "Venter på endring av DHCP IPv4-modus", "network_save_settings": "Lagre innstillinger", "network_save_settings_apply_title": "Bruk nettverksinnstillinger", "network_save_settings_confirm": "Bruk endringer", - "network_save_settings_confirm_description": "Følgende nettverksinnstillinger vil bli brukt. Endringene kan kreve omstart og føre til midlertidig frakobling.", + "network_save_settings_confirm_description": "Følgende nettverksinnstillinger vil bli brukt. Disse endringene kan kreve en omstart og forårsake en kortvarig frakobling.", "network_save_settings_confirm_heading": "Konfigurasjonsendringer", "network_save_settings_failed": "Kunne ikke lagre nettverksinnstillinger: {error}", "network_save_settings_success": "Nettverksinnstillinger lagret", @@ -734,18 +734,18 @@ "setting_remote_description": "Innstilling av fjernkontrollbeskrivelse", "setting_remote_session_description": "Angi beskrivelse av ekstern økt...", "setting_up_connection_to_device": "Setter opp tilkobling til enhet...", - "settings_access": "Tilgang", + "settings_access": "Adgang", "settings_advanced": "Avansert", "settings_appearance": "Utseende", "settings_back_to_kvm": "Tilbake til KVM", - "settings_general": "Generelt", + "settings_general": "General", "settings_hardware": "Maskinvare", "settings_keyboard": "Tastatur", "settings_keyboard_macros": "Tastaturmakroer", "settings_mouse": "Mus", "settings_network": "Nettverk", "settings_video": "Video", - "something_went_wrong": "Noe gikk galt. Prøv igjen senere eller kontakt kundestøtte.", + "something_went_wrong": "Noe gikk galt. Prøv igjen senere, eller kontakt kundestøtte.", "step_counter_step": "Trinn {step}", "subnet_mask": "Nettmaske", "time_division_days": "dager", @@ -814,7 +814,7 @@ "video_brightness_title": "Lysstyrke", "video_contrast_description": "Kontrastnivå ( {value} x)", "video_contrast_title": "Kontrast", - "video_custom_edid_description": "EDID beskriver hvilke videomodi som støttes. Standardinnstillingene fungerer i de fleste tilfeller, men unike UEFI/BIOS-innstillinger kan trenge justeringer.", + "video_custom_edid_description": "EDID beskriver kompatibilitet med videomodus. Standardinnstillingene fungerer i de fleste tilfeller, men unike UEFI/BIOS-innstillinger kan trenge justeringer.", "video_custom_edid_title": "Tilpasset EDID", "video_debugging_info_description": "Feilsøkingsinformasjon for video", "video_debugging_info_title": "Feilsøkingsinformasjon", @@ -853,14 +853,8 @@ "video_overlay_no_hdmi_adapter_compat": "Hvis du bruker en adapter, må du sørge for at den er kompatibel og fungerer som den skal.", "video_overlay_no_hdmi_ensure_cable": "Sørg for at HDMI-kabelen er ordentlig koblet til i begge ender", "video_overlay_no_hdmi_ensure_power": "Sørg for at kildeenheten er slått på og sender ut et signal", - "video_overlay_no_hdmi_signal": "Ingen HDMI-signal funnet.", + "video_overlay_no_hdmi_signal": "Ingen HDMI-signal oppdaget.", "video_overlay_pointerlock_click_to_enable": "Klikk på videoen for å aktivere musekontroll", - "video_overlay_reboot_device_is_rebooting": "Enheten starter på nytt", - "video_overlay_reboot_different_ip_message": "Enheten kan ha startet på nytt med en annen IP-adresse. Sjekk JetKVM-ens fysiske skjerm for å finne den gjeldende IP-adressen, og koble til på nytt.", - "video_overlay_reboot_please_wait_message": "Vent mens enheten starter på nytt. Dette tar vanligvis 20–30 sekunder.", - "video_overlay_reboot_timeout_message": "Tidsavbrudd for automatisk gjenoppkobling", - "video_overlay_reboot_unable_to_reconnect": "Kan ikke koble til på nytt", - "video_overlay_reboot_waiting_for_restart": "Venter på at enheten skal starte på nytt …", "video_overlay_retrying_connection": "Prøver tilkobling på nytt …", "video_overlay_troubleshooting_guide": "Feilsøkingsveiledning", "video_overlay_try_again": "Prøv igjen", @@ -897,5 +891,5 @@ "wake_on_lan_invalid_mac": "Ugyldig MAC-adresse", "wake_on_lan_magic_sent_success": "Magisk pakke sendt", "welcome_to_jetkvm": "Velkommen til JetKVM", - "welcome_to_jetkvm_description": "Fjernstyr enhver datamaskin" + "welcome_to_jetkvm_description": "Kontroller hvilken som helst datamaskin eksternt" } diff --git a/ui/localization/messages/sv.json b/ui/localization/messages/sv.json index a4df3271..820d9a1d 100644 --- a/ui/localization/messages/sv.json +++ b/ui/localization/messages/sv.json @@ -57,7 +57,7 @@ "action_bar_web_terminal": "Webbterminal", "advanced_description": "Få åtkomst till ytterligare inställningar för felsökning och anpassning", "advanced_dev_channel_description": "Få tidiga uppdateringar från utvecklingskanalen", - "advanced_dev_channel_title": "Utvecklingskanal", + "advanced_dev_channel_title": "Uppdateringar av utvecklarkanaler", "advanced_developer_mode_description": "Aktivera avancerade funktioner för utvecklare", "advanced_developer_mode_enabled_title": "Utvecklarläge aktiverat", "advanced_developer_mode_title": "Utvecklarläge", @@ -75,7 +75,7 @@ "advanced_error_usb_emulation_disable": "Misslyckades med att inaktivera USB-emulering: {error}", "advanced_error_usb_emulation_enable": "Misslyckades med att aktivera USB-emulering: {error}", "advanced_loopback_only_description": "Begränsa åtkomst till webbgränssnittet endast till lokal värd (127.0.0.1)", - "advanced_loopback_only_title": "Loopback-läge", + "advanced_loopback_only_title": "Endast loopback-läge", "advanced_loopback_warning_before": "Innan du aktiverar den här funktionen, se till att du har antingen:", "advanced_loopback_warning_cloud": "Molnåtkomst aktiverad och fungerar", "advanced_loopback_warning_confirm": "Jag förstår, aktivera ändå", @@ -83,7 +83,7 @@ "advanced_loopback_warning_ssh": "SSH-åtkomst konfigurerad och testad", "advanced_loopback_warning_title": "Aktivera endast loopback-läge?", "advanced_reset_config_button": "Återställ konfiguration", - "advanced_reset_config_description": "Återställ konfigurationen till standardinställningar (du loggas ut).", + "advanced_reset_config_description": "Återställ konfigurationen till standard. Detta loggar ut dig.", "advanced_reset_config_title": "Återställ konfigurationen", "advanced_ssh_access_description": "Lägg till din offentliga SSH-nyckel för att aktivera säker fjärråtkomst till enheten", "advanced_ssh_access_title": "SSH-åtkomst", @@ -94,7 +94,7 @@ "advanced_success_loopback_enabled": "Endast loopback-läge aktiverat. Starta om enheten för att tillämpa.", "advanced_success_reset_config": "Konfigurationen återställdes till standardinställningarna", "advanced_success_update_ssh_key": "SSH-nyckeln har uppdaterats", - "advanced_title": "Avancerat", + "advanced_title": "Avancerad", "advanced_troubleshooting_mode_description": "Diagnostikverktyg och ytterligare kontroller för felsökning och utvecklingsändamål", "advanced_troubleshooting_mode_title": "Felsökningsläge", "advanced_update_ssh_key_button": "Uppdatera SSH-nyckel", @@ -115,9 +115,9 @@ "atx_power_control_get_state_error": "Misslyckades med att hämta ATX-strömstatus: {error}", "atx_power_control_hdd_led": "Hårddisk-LED", "atx_power_control_long_power_button": "Långt tryck", - "atx_power_control_power_button": "Ström", + "atx_power_control_power_button": "Driva", "atx_power_control_power_led": "Ström-LED", - "atx_power_control_reset_button": "Starta om", + "atx_power_control_reset_button": "Återställa", "atx_power_control_send_action_error": "Misslyckades med att skicka ATX-strömåtgärd {action} : {error}", "atx_power_control_short_power_button": "Kort tryck", "auth_authentication_mode": "Välj ett autentiseringsläge", @@ -128,7 +128,7 @@ "auth_connect_to_cloud_description": "Lås upp fjärråtkomst och avancerade funktioner för din enhet", "auth_header_cta_already_have_account": "Har du redan ett konto?", "auth_header_cta_dont_have_account": "Har du inget konto?", - "auth_header_cta_new_to_jetkvm": "Ny på JetKVM?", + "auth_header_cta_new_to_jetkvm": "Nybörjare på JetKVM?", "auth_login": "Logga in på ditt JetKVM-konto", "auth_login_action": "Logga in", "auth_login_description": "Logga in för att få åtkomst till och hantera dina enheter säkert", @@ -186,7 +186,7 @@ "connection_stats_video_description": "Videoströmmen från JetKVM till klienten.", "continue": "Fortsätta", "creating_peer_connection": "Skapar peer-kontakt…", - "dc_power_control_current": "Ström", + "dc_power_control_current": "Nuvarande", "dc_power_control_current_unit": "En", "dc_power_control_get_state_error": "Misslyckades med att hämta likströmsstatus: {error}", "dc_power_control_power": "Driva", @@ -305,7 +305,7 @@ "hardware_power_saving_failed_error": "Misslyckades med att ställa in energisparläge: {error}", "hardware_power_saving_hdmi_sleep_description": "Stäng av inspelning efter 90 sekunders inaktivitet", "hardware_power_saving_hdmi_sleep_title": "HDMI-viloläge", - "hardware_power_saving_title": "Energisparläge", + "hardware_power_saving_title": "Energisparande", "hardware_time_10_minutes": "10 minuter", "hardware_time_1_hour": "1 timme", "hardware_time_1_minute": "1 minut", @@ -366,14 +366,14 @@ "keyboard_layout_long_description": "Det virtuella tangentbordet, textklistringen och tangentbordsmakron skickar individuella tangenttryckningar till målenheten. Tangentbordslayouten avgör vilka tangentkoder som skickas. Se till att tangentbordslayouten i JetKVM matchar inställningarna i operativsystemet.", "keyboard_layout_success": "Tangentbordslayouten har ställts in på {layout}", "keyboard_layout_title": "Tangentbordslayout", - "keyboard_show_pressed_keys_description": "Visa nedtryckta tangenter i statusfältet", + "keyboard_show_pressed_keys_description": "Visa tangenterna som för närvarande är nedtryckta i statusfältet", "keyboard_show_pressed_keys_title": "Visa nedtryckta tangenter", "keyboard_title": "Tangentbord", "kvm_terminal": "KVM-terminal", "last_online": "Senast online {time}", "learn_more": "Läs mer", "load": "Ladda", - "loading": "Laddar…", + "loading": "Belastning…", "local_auth_change_local_device_password_description": "Ange ditt nuvarande lösenord och ett nytt lösenord för att uppdatera ditt lokala enhetsskydd.", "local_auth_change_local_device_password_title": "Ändra lösenord för lokal enhet", "local_auth_confirm_new_password_label": "Bekräfta nytt lösenord", @@ -574,7 +574,7 @@ "mouse_mode_absolute": "Absolut", "mouse_mode_absolute_description": "Mest bekvämt", "mouse_mode_relative": "Relativ", - "mouse_mode_relative_description": "Mest kompatibelt", + "mouse_mode_relative_description": "Mest kompatibla", "mouse_modes_description": "Välj musinmatningsläge", "mouse_modes_title": "Lägen", "mouse_scroll_high": "Hög", @@ -586,7 +586,7 @@ "mouse_scroll_very_high": "Mycket hög", "mouse_title": "Mus", "network_custom_domain": "Anpassad domän", - "network_description": "Konfigurera nätverksinställningar", + "network_description": "Konfigurera dina nätverksinställningar", "network_dhcp_client_description": "Konfigurera vilken DHCP-klient som ska användas", "network_dhcp_client_jetkvm": "JetKVM Intern", "network_dhcp_client_title": "DHCP-klient", @@ -598,7 +598,7 @@ "network_dhcp_lease_renew_success": "DHCP-lease förnyad", "network_domain_custom": "Anpassad", "network_domain_description": "Nätverksdomänsuffix för enheten", - "network_domain_dhcp_provided": "Tillhandahålls av DHCP", + "network_domain_dhcp_provided": "DHCP tillhandahålls", "network_domain_local": ".lokal", "network_domain_title": "Domän", "network_hostname_description": "Enhetsidentifierare i nätverket. Tomt för systemstandard", @@ -636,7 +636,7 @@ "network_ipv6_prefix_invalid": "Prefixet måste vara mellan 0 och 128", "network_ll_dp_all": "Alla", "network_ll_dp_basic": "Grundläggande", - "network_ll_dp_description": "Styr vilka TLV:er som skickas via LLDP", + "network_ll_dp_description": "Kontrollera vilka TLV:er som ska skickas via Link Layer Discovery Protocol", "network_ll_dp_disabled": "Inaktiverad", "network_ll_dp_title": "LLDP", "network_mac_address_copy_error": "Misslyckades med att kopiera MAC-adressen", @@ -656,7 +656,7 @@ "network_save_settings": "Spara inställningar", "network_save_settings_apply_title": "Tillämpa nätverksinställningar", "network_save_settings_confirm": "Tillämpa ändringar", - "network_save_settings_confirm_description": "Följande nätverksinställningar tillämpas. Dessa ändringar kan kräva en omstart och orsaka en kortvarig frånkoppling.", + "network_save_settings_confirm_description": "Följande nätverksinställningar kommer att tillämpas. Dessa ändringar kan kräva en omstart och orsaka en kortvarig frånkoppling.", "network_save_settings_confirm_heading": "Konfigurationsändringar", "network_save_settings_failed": "Misslyckades med att spara nätverksinställningar: {error}", "network_save_settings_success": "Nätverksinställningar sparade", @@ -700,7 +700,7 @@ "peer_connection_error": "Anslutningsfel", "peer_connection_failed": "Anslutningen misslyckades", "peer_connection_new": "Ansluter", - "previous": "Föregående", + "previous": "Tidigare", "register_device_error": "Det uppstod ett fel {error} din enhet registrerades.", "register_device_finish_button": "Slutför installationen", "register_device_name_description": "Namnge din enhet så att du enkelt kan identifiera den senare. Du kan ändra namnet när som helst.", @@ -714,9 +714,9 @@ "rename_device_new_name_label": "Nytt enhetsnamn", "rename_device_new_name_placeholder": "Plex Media Server", "rename_device_no_name": "Vänligen ange ett namn", - "retry": "Försök igen", - "saving": "Sparar…", - "search_placeholder": "Sök…", + "retry": "Försöka igen", + "saving": "Sparande…", + "search_placeholder": "Söka…", "serial_console": "Seriell konsol", "serial_console_baud_rate": "Baudhastighet", "serial_console_configure_description": "Konfigurera dina seriella konsolinställningar", @@ -745,7 +745,7 @@ "settings_mouse": "Mus", "settings_network": "Nätverk", "settings_video": "Video", - "something_went_wrong": "Något gick fel. Försök igen senare eller kontakta support.", + "something_went_wrong": "Något gick fel. Försök igen senare eller kontakta supporten.", "step_counter_step": "Steg {step}", "subnet_mask": "Subnätmask", "time_division_days": "dagar", @@ -829,7 +829,7 @@ "video_edid_jetkvm_default": "JetKVM-standard", "video_edid_set_success": "EDID har ställts in på {edid}", "video_edid_title": "EDID", - "video_enhancement_description": "Justera färginställningarna för att göra bilden mer levande och färgrik", + "video_enhancement_description": "Justera färginställningarna för att göra videoutgången mer levande och färgglad", "video_enhancement_title": "Videoförbättring", "video_failed_get_debug_info": "Misslyckades med att hämta felsökningsinformation: {error}", "video_failed_get_edid": "Misslyckades med att hämta EDID: {error}", @@ -853,14 +853,8 @@ "video_overlay_no_hdmi_adapter_compat": "Om du använder en adapter, se till att den är kompatibel och fungerar korrekt.", "video_overlay_no_hdmi_ensure_cable": "Se till att HDMI-kabeln är ordentligt ansluten i båda ändar", "video_overlay_no_hdmi_ensure_power": "Se till att källenheten är påslagen och matar ut en signal", - "video_overlay_no_hdmi_signal": "Ingen HDMI-signal hittades.", + "video_overlay_no_hdmi_signal": "Ingen HDMI-signal detekterad.", "video_overlay_pointerlock_click_to_enable": "Klicka på videon för att aktivera muskontroll", - "video_overlay_reboot_device_is_rebooting": "Enheten startar om", - "video_overlay_reboot_different_ip_message": "Enheten kan ha startats om med en annan IP-adress. Kontrollera JetKVM:s fysiska skärm för att hitta den aktuella IP-adressen och anslut igen.", - "video_overlay_reboot_please_wait_message": "Vänta medan enheten startar om. Detta tar vanligtvis 20–30 sekunder.", - "video_overlay_reboot_timeout_message": "Automatisk återanslutning har nått tidsgränsen", - "video_overlay_reboot_unable_to_reconnect": "Det går inte att återansluta", - "video_overlay_reboot_waiting_for_restart": "Väntar på att enheten ska startas om…", "video_overlay_retrying_connection": "Försöker ansluta igen…", "video_overlay_troubleshooting_guide": "Felsökningsguide", "video_overlay_try_again": "Försök igen", diff --git a/ui/localization/messages/zh.json b/ui/localization/messages/zh.json index 14a55883..416a1eed 100644 --- a/ui/localization/messages/zh.json +++ b/ui/localization/messages/zh.json @@ -855,12 +855,6 @@ "video_overlay_no_hdmi_ensure_power": "确保源设备已打开并输出信号", "video_overlay_no_hdmi_signal": "未检测到 HDMI 信号。", "video_overlay_pointerlock_click_to_enable": "点击视频即可启用鼠标控制", - "video_overlay_reboot_device_is_rebooting": "设备正在重启", - "video_overlay_reboot_different_ip_message": "设备可能已使用不同的 IP 地址重启。请检查 JetKVM 的物理显示器以找到当前 IP 地址并重新连接。", - "video_overlay_reboot_please_wait_message": "请等待设备重启。这通常需要 20-30 秒。", - "video_overlay_reboot_timeout_message": "自动重新连接超时", - "video_overlay_reboot_unable_to_reconnect": "无法重新连接", - "video_overlay_reboot_waiting_for_restart": "正在等待设备重启…", "video_overlay_retrying_connection": "正在重试连接…", "video_overlay_troubleshooting_guide": "故障排除指南", "video_overlay_try_again": "再试一次", @@ -897,5 +891,11 @@ "wake_on_lan_invalid_mac": "无效的 MAC 地址", "wake_on_lan_magic_sent_success": "魔包发送成功", "welcome_to_jetkvm": "欢迎来到 JetKVM", - "welcome_to_jetkvm_description": "远程控制任何计算机" + "welcome_to_jetkvm_description": "远程控制任何计算机", + "video_overlay_reboot_device_is_rebooting": "设备正在重启", + "video_overlay_reboot_different_ip_message": "设备可能已使用不同的 IP 地址重启。请检查 JetKVM 的物理显示器以找到当前 IP 地址并重新连接。", + "video_overlay_reboot_please_wait_message": "请等待设备重启。这通常需要 20-30 秒。", + "video_overlay_reboot_timeout_message": "自动重新连接超时", + "video_overlay_reboot_unable_to_reconnect": "无法重新连接", + "video_overlay_reboot_waiting_for_restart": "正在等待设备重启…" } diff --git a/ui/src/components/PublicIPCard.tsx b/ui/src/components/PublicIPCard.tsx new file mode 100644 index 00000000..a2671753 --- /dev/null +++ b/ui/src/components/PublicIPCard.tsx @@ -0,0 +1,86 @@ +import { LuRefreshCcw } from "react-icons/lu"; +import { useCallback, useEffect, useState } from "react"; + +import { Button } from "@components/Button"; +import { GridCard } from "@components/Card"; +import { PublicIP } from "@hooks/stores"; +import { m } from "@localizations/messages.js"; +import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc"; +import notifications from "@/notifications"; + + +export default function PublicIPCard() { + const { send } = useJsonRpc(); + + const [publicIPs, setPublicIPs] = useState([]); + const refreshPublicIPs = useCallback(() => { + send("getPublicIPAddresses", { refresh: true }, (resp: JsonRpcResponse) => { + setPublicIPs([]); + if ("error" in resp) { + notifications.error(m.public_ip_card_refresh_error({ error: resp.error.data || m.unknown_error() })); + return; + } + const publicIPs = resp.result as PublicIP[]; + setPublicIPs(publicIPs.sort(({ ip: aIp }, { ip: bIp }) => { + const aIsIPv6 = aIp.includes(":"); + const bIsIPv6 = bIp.includes(":"); + if (aIsIPv6 && !bIsIPv6) return 1; + if (!aIsIPv6 && bIsIPv6) return -1; + return aIp.localeCompare(bIp); + })); + }); + }, [send, setPublicIPs]); + + useEffect(() => { + refreshPublicIPs(); + }, [refreshPublicIPs]); + + return ( + +
+
+
+

+ {m.public_ip_card_header()} +

+ +
+
+
+ {publicIPs.length === 0 ? ( +
+
+
+
+
+
+
+
+
+ ) : ( +
+
+ {publicIPs?.map(ip => ( +
+ + {ip.ip} + +
+ ))} +
+
+ )} +
+
+ + ); +} diff --git a/ui/src/components/sidebar/connectionStats.tsx b/ui/src/components/sidebar/connectionStats.tsx index f10f906c..637f1597 100644 --- a/ui/src/components/sidebar/connectionStats.tsx +++ b/ui/src/components/sidebar/connectionStats.tsx @@ -1,4 +1,6 @@ import { useInterval } from "usehooks-ts"; +import { LuCopy } from "react-icons/lu"; +import { useState } from "react"; import { m } from "@localizations/messages.js"; import { useRTCStore, useUiStore } from "@hooks/stores"; @@ -6,6 +8,10 @@ import { createChartArray, Metric } from "@components/Metric"; import { SettingsSectionHeader } from "@components/SettingsSectionHeader"; import SidebarHeader from "@components/SidebarHeader"; import { someIterable } from "@/utils"; +import { GridCard } from "@components/Card"; +import { Button } from "@components/Button"; +import { useCopyToClipboard } from "@components/useCopyToClipBoard"; +import notifications from "@/notifications"; export default function ConnectionStatsSidebar() { const { sidebarView, setSidebarView } = useUiStore(); @@ -21,6 +27,8 @@ export default function ConnectionStatsSidebar() { appendDiskDataChannelStats, } = useRTCStore(); + const [remoteIPAddress, setRemoteIPAddress] = useState(null); + useInterval(function collectWebRTCStats() { (async () => { if (!mediaStream) return; @@ -49,6 +57,7 @@ export default function ConnectionStatsSidebar() { } else if (report.type === "remote-candidate") { if (successfulRemoteCandidateId === report.id) { appendRemoteCandidateStats(report); + setRemoteIPAddress(report.address); } } else if (report.type === "data-channel" && report.label === "disk") { appendDiskDataChannelStats(report); @@ -93,6 +102,8 @@ export default function ConnectionStatsSidebar() { return { date: d.date, metric: valueMs }; }); + const { copy } = useCopyToClipboard(); + return (
@@ -106,6 +117,28 @@ export default function ConnectionStatsSidebar() { title={m.connection_stats_connection()} description={m.connection_stats_connection_description()} /> + {remoteIPAddress && ( +
+
+ {m.connection_stats_remote_ip_address()} +
+
+ +
+ {remoteIPAddress} +
+
+
+
+ )} + +
{formState.isLoading ? ( @@ -540,25 +543,25 @@ export default function SettingsNetworkRoute() {
- { isLLDPAvailable && - ( -
- - - -
- ) + {isLLDPAvailable && + ( +
+ + + +
+ ) }