From 26b2b4e9b5fc7d34ba3385e5b79e46aa97f560c0 Mon Sep 17 00:00:00 2001 From: Marc Brooks Date: Thu, 2 Oct 2025 19:39:14 +0000 Subject: [PATCH] Localize the extension popovers. --- ui/messages/da.json | 49 ++++++++++++++++++- ui/messages/de.json | 49 ++++++++++++++++++- ui/messages/en.json | 49 ++++++++++++++++++- ui/messages/es.json | 49 ++++++++++++++++++- ui/messages/fr.json | 49 ++++++++++++++++++- ui/messages/it.json | 49 ++++++++++++++++++- ui/messages/nb.json | 49 ++++++++++++++++++- ui/messages/sv.json | 49 ++++++++++++++++++- ui/messages/zh.json | 49 ++++++++++++++++++- ui/project.inlang/settings.json | 3 +- .../components/extensions/ATXPowerControl.tsx | 34 +++++-------- .../components/extensions/DCPowerControl.tsx | 47 ++++++++---------- .../components/extensions/SerialConsole.tsx | 43 ++++++++-------- .../components/popovers/ExtensionPopover.tsx | 25 +++++----- ui/tsconfig.json | 3 +- 15 files changed, 502 insertions(+), 94 deletions(-) diff --git a/ui/messages/da.json b/ui/messages/da.json index ba4227d4..806f3b4e 100644 --- a/ui/messages/da.json +++ b/ui/messages/da.json @@ -4,6 +4,8 @@ "oh_no": "Åh nej!", "something_went_wrong": "Noget gik galt. Prøv igen senere, eller kontakt support.", "jetkvm_logo": "JetKVM-logo", + "load": "Indlæs", + "unknown_error": "Ukendt fejl", "action_bar_virtual_media": "Virtuelle medier", "action_bar_paste_text": "Indsæt tekst", "action_bar_web_terminal": "Webterminal", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Forbindelsesstatistik", "action_bar_settings": "Indstillinger", "action_bar_fullscreen": "Fuldskærm", - "action_bar_exit_fullscreen": "Afslut fuldskærm" + "action_bar_exit_fullscreen": "Afslut fuldskærm", + "extensions_popover_extensions": "Udvidelser", + "extension_popover_set_error_notification": "Kunne ikke angive aktiv udvidelse: {error}", + "extension_popover_unload_extension": "Fjern udvidelse", + "extension_popover_load_and_manage_extensions": "Indlæs og administrer dine udvidelser", + "extensions_atx_power_control": "ATX-strømstyring", + "extensions_atx_power_control_description": "Styr din maskines strømtilstand via ATX-strømstyring.", + "extensions_dc_power_control": "DC-strømstyring", + "extensions_dc_power_control_description": "Styr din DC-strømforlænger", + "extension_serial_console": "Seriel konsol", + "extension_serial_console_description": "Få adgang til din serielle konsoludvidelse", + "atx_power_control_get_state_error": "Kunne ikke hente ATX-strømtilstand: {error}", + "atx_power_control_send_action_error": "Kunne ikke sende ATX-strømfunktion {action} : {error}", + "atx_power_control_power_button": "Magt", + "atx_power_control_short_power_button": "Kort tryk", + "atx_power_control_long_power_button": "Langt tryk", + "atx_power_control_reset_button": "Nulstil", + "atx_power_control_power_led": "Strøm-LED", + "atx_power_control_hdd_led": "HDD-LED", + "dc_power_control_get_state_error": "Kunne ikke hente DC-strømtilstand: {error}", + "dc_power_control_set_power_state_error": "Kunne ikke sende DC-strømstatus til {enabled} : {error}", + "dc_power_control_set_restore_state_error": "Kunne ikke sende DC-strømgendannelsesstatus til {state} : {error}", + "dc_power_control_power_on_button": "Tænd", + "dc_power_control_power_off_button": "Sluk", + "dc_power_control_restore_power_state": "Gendan strømtab", + "dc_power_control_power_on_state": "Tænd", + "dc_power_control_power_off_state": "Sluk", + "dc_power_control_voltage": "Spænding", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Strøm", + "dc_power_control_current_unit": "A", + "dc_power_control_power": "Magt", + "dc_power_control_power_unit": "W", + "serial_console_get_state_error": "Kunne ikke hente indstillinger for seriel konsol: {error}", + "serial_console_set_power_state_error": "Kunne ikke indstille seriel konsolindstillinger til {settings} : {error}", + "serial_console_configure_description": "Konfigurer dine serielle konsolindstillinger", + "serial_console_open_console": "Åbn konsol", + "serial_console_baud_rate": "Baudhastighed", + "serial_console_data_bits": "Databits", + "serial_console_stop_bits": "Stopbits", + "serial_console_parity": "Paritet", + "serial_console_parity_even": "Lige paritet", + "serial_console_parity_odd": "Ulige paritet", + "serial_console_parity_none": "Ingen paritet", + "serial_console_parity_mark": "Mark Paritet", + "serial_console_parity_space": "Rumparitet" } \ No newline at end of file diff --git a/ui/messages/de.json b/ui/messages/de.json index 5b3f9a35..bbcee760 100644 --- a/ui/messages/de.json +++ b/ui/messages/de.json @@ -4,6 +4,8 @@ "oh_no": "Oh nein!", "something_went_wrong": "Ein Fehler ist aufgetreten. Bitte versuchen Sie es später noch einmal oder wenden Sie sich an den Support.", "jetkvm_logo": "JetKVM Logo", + "load": "Laden", + "unknown_error": "Unbekannter Fehler", "action_bar_virtual_media": "Virtuelle Medien", "action_bar_paste_text": "Text einfügen", "action_bar_web_terminal": "Web-Terminal", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Verbindungsstatistiken", "action_bar_settings": "Einstellungen", "action_bar_fullscreen": "Vollbild", - "action_bar_exit_fullscreen": "Vollbildmodus beenden" + "action_bar_exit_fullscreen": "Vollbildmodus beenden", + "extensions_popover_extensions": "Erweiterungen", + "extension_popover_set_error_notification": "Fehler beim Festlegen der aktiven Erweiterung: {error}", + "extension_popover_unload_extension": "Erweiterung entladen", + "extension_popover_load_and_manage_extensions": "Laden und verwalten Sie Ihre Erweiterungen", + "extensions_atx_power_control": "ATX-Stromsteuerung", + "extensions_atx_power_control_description": "Steuern Sie den Energiezustand Ihrer Maschine über die ATX-Energiesteuerung.", + "extensions_dc_power_control": "Gleichstromsteuerung", + "extensions_dc_power_control_description": "Steuern Sie Ihre DC-Stromerweiterung", + "extension_serial_console": "Serielle Konsole", + "extension_serial_console_description": "Greifen Sie auf Ihre serielle Konsolenerweiterung zu", + "atx_power_control_get_state_error": "ATX-Stromversorgungsstatus konnte nicht abgerufen werden: {error}", + "atx_power_control_send_action_error": "ATX-Stromversorgungsaktion {action} konnte nicht gesendet werden: {error}", + "atx_power_control_power_button": "Leistung", + "atx_power_control_short_power_button": "Kurzes Drücken", + "atx_power_control_long_power_button": "Langes Drücken", + "atx_power_control_reset_button": "Zurücksetzen", + "atx_power_control_power_led": "Betriebs-LED", + "atx_power_control_hdd_led": "Festplatten-LED", + "dc_power_control_get_state_error": "Der Gleichstromstatus konnte nicht abgerufen werden: {error}", + "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_power_on_button": "Einschalten", + "dc_power_control_power_off_button": "Ausschalten", + "dc_power_control_restore_power_state": "Wiederherstellung nach Stromausfall", + "dc_power_control_power_on_state": "Einschalten", + "dc_power_control_power_off_state": "Ausschalten", + "dc_power_control_voltage": "Stromspannung", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Aktuell", + "dc_power_control_current_unit": "A", + "dc_power_control_power": "Leistung", + "dc_power_control_power_unit": "W", + "serial_console_get_state_error": "Die seriellen Konsoleneinstellungen konnten nicht abgerufen werden: {error}", + "serial_console_set_power_state_error": "Die Einstellungen der seriellen Konsole konnten nicht auf {settings} festgelegt werden: {error}", + "serial_console_configure_description": "Konfigurieren Sie die Einstellungen Ihrer seriellen Konsole", + "serial_console_open_console": "Konsole öffnen", + "serial_console_baud_rate": "Baudrate", + "serial_console_data_bits": "Datenbits", + "serial_console_stop_bits": "Stoppbits", + "serial_console_parity": "Parität", + "serial_console_parity_even": "Gerade Parität", + "serial_console_parity_odd": "Ungerade Parität", + "serial_console_parity_none": "Keine Parität", + "serial_console_parity_mark": "Parität markieren", + "serial_console_parity_space": "Raumparität" } \ No newline at end of file diff --git a/ui/messages/en.json b/ui/messages/en.json index b71e2c71..ed0c995e 100644 --- a/ui/messages/en.json +++ b/ui/messages/en.json @@ -4,6 +4,8 @@ "oh_no": "Oh no!", "something_went_wrong": "Something went wrong. Please try again later or contact support", "jetkvm_logo": "JetKVM Logo", + "load": "Load", + "unknown_error": "Unknown error", "action_bar_virtual_media": "Virtual Media", "action_bar_paste_text": "Paste text", "action_bar_web_terminal": "Web Terminal", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Connection Stats", "action_bar_settings": "Settings", "action_bar_fullscreen": "Fullscreen", - "action_bar_exit_fullscreen": "Exit Fullscreen" + "action_bar_exit_fullscreen": "Exit Fullscreen", + "extensions_popover_extensions": "Extensions", + "extension_popover_set_error_notification": "Failed to set active extension: {error}", + "extension_popover_unload_extension": "Unload Extension", + "extension_popover_load_and_manage_extensions": "Load and manage your extensions", + "extensions_atx_power_control": "ATX Power Control", + "extensions_atx_power_control_description": "Control the power state of your machine via ATX power control.", + "extensions_dc_power_control": "DC Power Control", + "extensions_dc_power_control_description": "Control your DC Power extension", + "extension_serial_console": "Serial Console", + "extension_serial_console_description": "Access your serial console extension", + "atx_power_control_get_state_error": "Failed to get ATX power state: {error}", + "atx_power_control_send_action_error": "Failed to send ATX power action {action}: {error}", + "atx_power_control_power_button": "Power", + "atx_power_control_short_power_button": "Short Press", + "atx_power_control_long_power_button": "Long Press", + "atx_power_control_reset_button": "Reset", + "atx_power_control_power_led": "Power LED", + "atx_power_control_hdd_led": "HDD LED", + "dc_power_control_get_state_error": "Failed to get DC power state: {error}", + "dc_power_control_set_power_state_error": "Failed to send DC power state to {enabled}: {error}", + "dc_power_control_set_restore_state_error": "Failed to send DC power restore state to {state}: {error}", + "dc_power_control_power_on_button": "Power On", + "dc_power_control_power_off_button": "Power Off", + "dc_power_control_restore_power_state": "Restore Power Loss", + "dc_power_control_power_on_state": "Power ON", + "dc_power_control_power_off_state": "Power OFF", + "dc_power_control_voltage": "Voltage", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Current", + "dc_power_control_current_unit": "A", + "dc_power_control_power": "Power", + "dc_power_control_power_unit": "W", + "serial_console_get_settings_error": "Failed to get serial console settings: {error}", + "serial_console_set_settings_error": "Failed to set serial console settings to {settings}: {error}", + "serial_console_configure_description": "Configure your serial console settings", + "serial_console_open_console": "Open Console", + "serial_console_baud_rate": "Baud Rate", + "serial_console_data_bits": "Data Bits", + "serial_console_stop_bits": "Stop Bits", + "serial_console_parity": "Parity", + "serial_console_parity_even": "Even Parity", + "serial_console_parity_odd": "Odd Parity", + "serial_console_parity_none": "No Parity", + "serial_console_parity_mark": "Mark Parity", + "serial_console_parity_space": "Space Parity" } \ No newline at end of file diff --git a/ui/messages/es.json b/ui/messages/es.json index e6ee19aa..f1140d2b 100644 --- a/ui/messages/es.json +++ b/ui/messages/es.json @@ -4,6 +4,8 @@ "oh_no": "¡Oh, no!", "something_went_wrong": "Algo salió mal. Inténtalo de nuevo más tarde o contacta con el servicio de asistencia.", "jetkvm_logo": "Logotipo de JetKVM", + "load": "Carga", + "unknown_error": "Error desconocido", "action_bar_virtual_media": "Medios virtuales", "action_bar_paste_text": "Pegar texto", "action_bar_web_terminal": "Terminal web", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Estadísticas de conexión", "action_bar_settings": "Ajustes", "action_bar_fullscreen": "Pantalla completa", - "action_bar_exit_fullscreen": "Salir de pantalla completa" + "action_bar_exit_fullscreen": "Salir de pantalla completa", + "extensions_popover_extensions": "Extensiones", + "extension_popover_set_error_notification": "No se pudo establecer la extensión activa: {error}", + "extension_popover_unload_extension": "Extensión de descarga", + "extension_popover_load_and_manage_extensions": "Cargar y administrar sus extensiones", + "extensions_atx_power_control": "Control de alimentación ATX", + "extensions_atx_power_control_description": "Controle el estado de energía de su máquina a través del control de energía ATX.", + "extensions_dc_power_control": "Control de potencia de CC", + "extensions_dc_power_control_description": "Controle su extensión de alimentación de CC", + "extension_serial_console": "Consola serial", + "extension_serial_console_description": "Acceda a la extensión de su consola serie", + "atx_power_control_get_state_error": "No se pudo obtener el estado de energía ATX: {error}", + "atx_power_control_send_action_error": "No se pudo enviar la acción de alimentación ATX {action} : {error}", + "atx_power_control_power_button": "Fuerza", + "atx_power_control_short_power_button": "Prensa corta", + "atx_power_control_long_power_button": "Pulsación larga", + "atx_power_control_reset_button": "Reiniciar", + "atx_power_control_power_led": "LED de encendido", + "atx_power_control_hdd_led": "LED del disco duro", + "dc_power_control_get_state_error": "No se pudo obtener el estado de la alimentación de CC: {error}", + "dc_power_control_set_power_state_error": "No se pudo enviar el estado de alimentación de CC a {enabled} : {error}", + "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_power_on_button": "Encendido", + "dc_power_control_power_off_button": "Apagado", + "dc_power_control_restore_power_state": "Restaurar pérdida de energía", + "dc_power_control_power_on_state": "Encendido", + "dc_power_control_power_off_state": "Apagado", + "dc_power_control_voltage": "Voltaje", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Amperio", + "dc_power_control_current_unit": "A", + "dc_power_control_power": "Vatio", + "dc_power_control_power_unit": "O", + "serial_console_get_state_error": "No se pudo obtener la configuración de la consola serial: {error}", + "serial_console_set_power_state_error": "No se pudieron establecer los ajustes de la consola serial en {settings} : {error}", + "serial_console_configure_description": "Configure los ajustes de su consola serie", + "serial_console_open_console": "Consola abierta", + "serial_console_baud_rate": "Tasa de Baud", + "serial_console_data_bits": "Bits de datos", + "serial_console_stop_bits": "Bits de parada", + "serial_console_parity": "Paridad", + "serial_console_parity_even": "Paridad uniforme", + "serial_console_parity_odd": "Paridad impar", + "serial_console_parity_none": "Sin paridad", + "serial_console_parity_mark": "Paridad de marca", + "serial_console_parity_space": "Paridad espacial" } \ No newline at end of file diff --git a/ui/messages/fr.json b/ui/messages/fr.json index 76be011e..2a7ae2ec 100644 --- a/ui/messages/fr.json +++ b/ui/messages/fr.json @@ -4,6 +4,8 @@ "oh_no": "Oh non!", "something_went_wrong": "Une erreur s'est produite. Veuillez réessayer ultérieurement ou contacter le support.", "jetkvm_logo": "Logo JetKVM", + "load": "Charger", + "unknown_error": "Erreur inconnue", "action_bar_virtual_media": "Médias virtuels", "action_bar_paste_text": "Coller du texte", "action_bar_web_terminal": "Terminal Web", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Statistiques de connexion", "action_bar_settings": "Paramètres", "action_bar_fullscreen": "Plein écran", - "action_bar_exit_fullscreen": "Quitter le plein écran" + "action_bar_exit_fullscreen": "Quitter le plein écran", + "extensions_popover_extensions": "Extensions", + "extension_popover_set_error_notification": "Échec de la définition de l'extension active: {error}", + "extension_popover_unload_extension": "Extension de déchargement", + "extension_popover_load_and_manage_extensions": "Chargez et gérez vos extensions", + "extensions_atx_power_control": "Contrôle d'alimentation ATX", + "extensions_atx_power_control_description": "Contrôlez l'état d'alimentation de votre machine via le contrôle d'alimentation ATX.", + "extensions_dc_power_control": "Contrôle de l'alimentation CC", + "extensions_dc_power_control_description": "Contrôlez votre extension d'alimentation CC", + "extension_serial_console": "Console série", + "extension_serial_console_description": "Accédez à votre extension de console série", + "atx_power_control_get_state_error": "Échec de l'obtention de l'état d'alimentation ATX : {error}", + "atx_power_control_send_action_error": "Échec de l'envoi de l'action d'alimentation ATX {action} : {error}", + "atx_power_control_power_button": "Pouvoir", + "atx_power_control_short_power_button": "Appui court", + "atx_power_control_long_power_button": "Appui long", + "atx_power_control_reset_button": "Réinitialiser", + "atx_power_control_power_led": "LED d'alimentation", + "atx_power_control_hdd_led": "Voyant du disque dur", + "dc_power_control_get_state_error": "Échec de l'obtention de l'état d'alimentation CC : {error}", + "dc_power_control_set_power_state_error": "Échec de l'envoi de l'état d'alimentation CC à {enabled} : {error}", + "dc_power_control_set_restore_state_error": "Échec de l'envoi de l'état de restauration de l'alimentation CC à {state} : {error}", + "dc_power_control_power_on_button": "Mise sous tension", + "dc_power_control_power_off_button": "Éteindre", + "dc_power_control_restore_power_state": "Restaurer la perte de puissance", + "dc_power_control_power_on_state": "Mise sous tension", + "dc_power_control_power_off_state": "Éteindre", + "dc_power_control_voltage": "Tension", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Ampère", + "dc_power_control_current_unit": "UN", + "dc_power_control_power": "Pouvoir", + "dc_power_control_power_unit": "W", + "serial_console_get_state_error": "Échec de l'obtention des paramètres de la console série : {error}", + "serial_console_set_power_state_error": "Échec de la définition des paramètres de la console série sur {settings} : {error}", + "serial_console_configure_description": "Configurez les paramètres de votre console série", + "serial_console_open_console": "Ouvrir la console", + "serial_console_baud_rate": "Débit en bauds", + "serial_console_data_bits": "Bits de données", + "serial_console_stop_bits": "Bits d'arrêt", + "serial_console_parity": "Parité", + "serial_console_parity_even": "Parité égale", + "serial_console_parity_odd": "Parité impaire", + "serial_console_parity_none": "Pas de parité", + "serial_console_parity_mark": "Marquer la parité", + "serial_console_parity_space": "Parité spatiale" } \ No newline at end of file diff --git a/ui/messages/it.json b/ui/messages/it.json index d0bc4e67..76bf3769 100644 --- a/ui/messages/it.json +++ b/ui/messages/it.json @@ -4,6 +4,8 @@ "oh_no": "Oh no!", "something_went_wrong": "Qualcosa è andato storto. Riprova più tardi o contatta l'assistenza.", "jetkvm_logo": "Logo JetKVM", + "load": "Carico", + "unknown_error": "Errore sconosciuto", "action_bar_virtual_media": "Media virtuali", "action_bar_paste_text": "Incolla il testo", "action_bar_web_terminal": "Terminale Web", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Statistiche di connessione", "action_bar_settings": "Impostazioni", "action_bar_fullscreen": "A schermo intero", - "action_bar_exit_fullscreen": "Esci dalla modalità a schermo intero" + "action_bar_exit_fullscreen": "Esci dalla modalità a schermo intero", + "extensions_popover_extensions": "Estensioni", + "extension_popover_set_error_notification": "Impossibile impostare l'estensione attiva: {error}", + "extension_popover_unload_extension": "Estensione di scaricamento", + "extension_popover_load_and_manage_extensions": "Carica e gestisci le tue estensioni", + "extensions_atx_power_control": "Controllo di potenza ATX", + "extensions_atx_power_control_description": "Controlla lo stato di alimentazione del tuo computer tramite il controllo di alimentazione ATX.", + "extensions_dc_power_control": "Controllo di potenza CC", + "extensions_dc_power_control_description": "Controlla la tua estensione di alimentazione CC", + "extension_serial_console": "Console seriale", + "extension_serial_console_description": "Accedi all'estensione della tua console seriale", + "atx_power_control_get_state_error": "Impossibile ottenere lo stato di alimentazione ATX: {error}", + "atx_power_control_send_action_error": "Impossibile inviare l'azione di alimentazione ATX {action} : {error}", + "atx_power_control_power_button": "Energia", + "atx_power_control_short_power_button": "Pressione breve", + "atx_power_control_long_power_button": "Pressione lunga", + "atx_power_control_reset_button": "Reset", + "atx_power_control_power_led": "LED di potenza", + "atx_power_control_hdd_led": "LED dell'HDD", + "dc_power_control_get_state_error": "Impossibile ottenere lo stato di alimentazione CC: {error}", + "dc_power_control_set_power_state_error": "Impossibile inviare lo stato di alimentazione CC a {enabled} : {error}", + "dc_power_control_set_restore_state_error": "Impossibile inviare lo stato di ripristino dell'alimentazione CC a {state} : {error}", + "dc_power_control_power_on_button": "Accensione", + "dc_power_control_power_off_button": "Spegnimento", + "dc_power_control_restore_power_state": "Ripristinare la perdita di potenza", + "dc_power_control_power_on_state": "Accensione", + "dc_power_control_power_off_state": "Spegnimento", + "dc_power_control_voltage": "Voltaggio", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Attuale", + "dc_power_control_current_unit": "UN", + "dc_power_control_power": "Energia", + "dc_power_control_power_unit": "O", + "serial_console_get_state_error": "Impossibile ottenere le impostazioni della console seriale: {error}", + "serial_console_set_power_state_error": "Impossibile impostare le impostazioni della console seriale su {settings} : {error}", + "serial_console_configure_description": "Configura le impostazioni della tua console seriale", + "serial_console_open_console": "Apri console", + "serial_console_baud_rate": "Velocità in baud", + "serial_console_data_bits": "Bit di dati", + "serial_console_stop_bits": "Bit di stop", + "serial_console_parity": "Parità", + "serial_console_parity_even": "Parità pari", + "serial_console_parity_odd": "Parità dispari", + "serial_console_parity_none": "Nessuna parità", + "serial_console_parity_mark": "Segna la parità", + "serial_console_parity_space": "Parità spaziale" } \ No newline at end of file diff --git a/ui/messages/nb.json b/ui/messages/nb.json index eed41513..a590dd9b 100644 --- a/ui/messages/nb.json +++ b/ui/messages/nb.json @@ -4,6 +4,8 @@ "oh_no": "Å nei!", "something_went_wrong": "Noe gikk galt. Prøv igjen senere, eller kontakt kundestøtte.", "jetkvm_logo": "JetKVM-logo", + "load": "Laste", + "unknown_error": "Ukjent feil", "action_bar_virtual_media": "Virtuelle medier", "action_bar_paste_text": "Lim inn tekst", "action_bar_web_terminal": "Nettterminal", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Tilkoblingsstatistikk", "action_bar_settings": "Innstillinger", "action_bar_fullscreen": "Fullskjerm", - "action_bar_exit_fullscreen": "Avslutt fullskjerm" + "action_bar_exit_fullscreen": "Avslutt fullskjerm", + "extensions_popover_extensions": "Utvidelser", + "extension_popover_set_error_notification": "Klarte ikke å angi aktiv utvidelse: {error}", + "extension_popover_unload_extension": "Fjern utvidelse", + "extension_popover_load_and_manage_extensions": "Last inn og administrer utvidelsene dine", + "extensions_atx_power_control": "ATX-strømstyring", + "extensions_atx_power_control_description": "Kontroller maskinens strømstatus via ATX-strømkontroll.", + "extensions_dc_power_control": "DC-strømkontroll", + "extensions_dc_power_control_description": "Kontroller DC-strømutvidelsen din", + "extension_serial_console": "Seriell konsoll", + "extension_serial_console_description": "Få tilgang til seriekonsollutvidelsen din", + "atx_power_control_get_state_error": "Klarte ikke å hente ATX-strømstatus: {error}", + "atx_power_control_send_action_error": "Kunne ikke sende ATX-strømhandling {action} : {error}", + "atx_power_control_power_button": "Makt", + "atx_power_control_short_power_button": "Kort trykk", + "atx_power_control_long_power_button": "Langt trykk", + "atx_power_control_reset_button": "Tilbakestill", + "atx_power_control_power_led": "Strøm-LED", + "atx_power_control_hdd_led": "HDD-LED", + "dc_power_control_get_state_error": "Klarte ikke å hente likestrømsstatus: {error}", + "dc_power_control_set_power_state_error": "Kunne ikke sende likestrømsstatus til {enabled} : {error}", + "dc_power_control_set_restore_state_error": "Kunne ikke sende gjenopprettingsstatus for likestrøm til {state} : {error}", + "dc_power_control_power_on_button": "Slå på", + "dc_power_control_power_off_button": "Slå av", + "dc_power_control_restore_power_state": "Gjenopprett strømtap", + "dc_power_control_power_on_state": "Slå PÅ", + "dc_power_control_power_off_state": "Slå av", + "dc_power_control_voltage": "Spenning", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Nåværende", + "dc_power_control_current_unit": "EN", + "dc_power_control_power": "Makt", + "dc_power_control_power_unit": "V", + "serial_console_get_state_error": "Klarte ikke å hente innstillinger for seriell konsoll: {error}", + "serial_console_set_power_state_error": "Klarte ikke å sette innstillingene for seriell konsoll til {settings} : {error}", + "serial_console_configure_description": "Konfigurer innstillingene for seriekonsollen", + "serial_console_open_console": "Åpne konsollen", + "serial_console_baud_rate": "Baudhastighet", + "serial_console_data_bits": "Databiter", + "serial_console_stop_bits": "Stoppbiter", + "serial_console_parity": "Paritet", + "serial_console_parity_even": "Paritet", + "serial_console_parity_odd": "Oddeparitet", + "serial_console_parity_none": "Ingen paritet", + "serial_console_parity_mark": "Mark Paritet", + "serial_console_parity_space": "Romparitet" } \ No newline at end of file diff --git a/ui/messages/sv.json b/ui/messages/sv.json index 4c5dc90d..603ba977 100644 --- a/ui/messages/sv.json +++ b/ui/messages/sv.json @@ -4,6 +4,8 @@ "oh_no": "nej då!", "something_went_wrong": "Något gick fel. Försök igen senare eller kontakta supporten.", "jetkvm_logo": "JetKVM-logotyp", + "load": "Ladda", + "unknown_error": "Okänt fel", "action_bar_virtual_media": "Virtuella medier", "action_bar_paste_text": "Klistra in text", "action_bar_web_terminal": "Webbterminal", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "Anslutningsstatistik", "action_bar_settings": "Inställningar", "action_bar_fullscreen": "Helskärm", - "action_bar_exit_fullscreen": "Avsluta helskärm" + "action_bar_exit_fullscreen": "Avsluta helskärm", + "extensions_popover_extensions": "Tillägg", + "extension_popover_set_error_notification": "Misslyckades med att ange aktivt tillägg: {error}", + "extension_popover_unload_extension": "Avlasta tillägg", + "extension_popover_load_and_manage_extensions": "Ladda och hantera dina tillägg", + "extensions_atx_power_control": "ATX-strömkontroll", + "extensions_atx_power_control_description": "Styr din maskins strömförsörjning via ATX-strömkontroll.", + "extensions_dc_power_control": "DC-strömstyrning", + "extensions_dc_power_control_description": "Styr din DC-strömförlängning", + "extension_serial_console": "Seriell konsol", + "extension_serial_console_description": "Åtkomst till din seriella konsoltillägg", + "atx_power_control_get_state_error": "Misslyckades med att hämta ATX-strömstatus: {error}", + "atx_power_control_send_action_error": "Misslyckades med att skicka ATX-strömåtgärd {action} : {error}", + "atx_power_control_power_button": "Driva", + "atx_power_control_short_power_button": "Kort tryck", + "atx_power_control_long_power_button": "Långt tryck", + "atx_power_control_reset_button": "Återställa", + "atx_power_control_power_led": "Ström-LED", + "atx_power_control_hdd_led": "Hårddisk-LED", + "dc_power_control_get_state_error": "Misslyckades med att hämta likströmsstatus: {error}", + "dc_power_control_set_power_state_error": "Misslyckades med att skicka likströmsstatus till {enabled} : {error}", + "dc_power_control_set_restore_state_error": "Misslyckades med att skicka återställningsstatus för likström till {state} : {error}", + "dc_power_control_power_on_button": "Slå på", + "dc_power_control_power_off_button": "Stäng av", + "dc_power_control_restore_power_state": "Återställ strömförlust", + "dc_power_control_power_on_state": "Slå på", + "dc_power_control_power_off_state": "Stäng av", + "dc_power_control_voltage": "Spänning", + "dc_power_control_voltage_unit": "V", + "dc_power_control_current": "Nuvarande", + "dc_power_control_current_unit": "En", + "dc_power_control_power": "Driva", + "dc_power_control_power_unit": "V", + "serial_console_get_state_error": "Misslyckades med att hämta inställningar för seriekonsolen: {error}", + "serial_console_set_power_state_error": "Misslyckades med att ställa in seriekonsolinställningarna till {settings} : {error}", + "serial_console_configure_description": "Konfigurera dina seriella konsolinställningar", + "serial_console_open_console": "Öppna konsolen", + "serial_console_baud_rate": "Baudhastighet", + "serial_console_data_bits": "Databitar", + "serial_console_stop_bits": "Stoppbitar", + "serial_console_parity": "Paritet", + "serial_console_parity_even": "Jämn paritet", + "serial_console_parity_odd": "Udda paritet", + "serial_console_parity_none": "Ingen paritet", + "serial_console_parity_mark": "Markera paritet", + "serial_console_parity_space": "Rymdparitet" } \ No newline at end of file diff --git a/ui/messages/zh.json b/ui/messages/zh.json index 2c7242e6..3049b9d4 100644 --- a/ui/messages/zh.json +++ b/ui/messages/zh.json @@ -4,6 +4,8 @@ "oh_no": "噢不!", "something_went_wrong": "出了点问题。请稍后重试或联系客服", "jetkvm_logo": "JetKVM 徽标", + "load": "加载", + "unknown_error": "未知错误", "action_bar_virtual_media": "虚拟媒体", "action_bar_paste_text": "粘贴文本", "action_bar_web_terminal": "网页终端", @@ -13,5 +15,50 @@ "action_bar_connection_stats": "连接统计", "action_bar_settings": "设置", "action_bar_fullscreen": "全屏", - "action_bar_exit_fullscreen": "退出全屏" + "action_bar_exit_fullscreen": "退出全屏", + "extensions_popover_extensions": "扩展", + "extension_popover_set_error_notification": "无法设置活动扩展:{error}", + "extension_popover_unload_extension": "卸载扩展", + "extension_popover_load_and_manage_extensions": "加载和管理您的扩展", + "extensions_atx_power_control": "ATX电源控制", + "extensions_atx_power_control_description": "通过 ATX 电源控制来控制机器的电源状态。", + "extensions_dc_power_control": "直流电源控制", + "extensions_dc_power_control_description": "控制您的直流电源扩展", + "extension_serial_console": "串行控制台", + "extension_serial_console_description": "访问串行控制台扩展", + "atx_power_control_get_state_error": "无法获取 ATX 电源状态:{error}", + "atx_power_control_send_action_error": "无法发送 ATX 电源操作{action} : {error}", + "atx_power_control_power_button": "力量", + "atx_power_control_short_power_button": "短按", + "atx_power_control_long_power_button": "长按", + "atx_power_control_reset_button": "重置", + "atx_power_control_power_led": "电源 LED", + "atx_power_control_hdd_led": "硬盘指示灯", + "dc_power_control_get_state_error": "无法获取直流电源状态:{error}", + "dc_power_control_set_power_state_error": "无法将直流电源状态发送到 {enabled} : {error}", + "dc_power_control_set_restore_state_error": "无法将直流电源恢复状态发送到 {state} : {error}", + "dc_power_control_power_on_button": "开机", + "dc_power_control_power_off_button": "关闭电源", + "dc_power_control_restore_power_state": "恢复断电", + "dc_power_control_power_on_state": "开启电源", + "dc_power_control_power_off_state": "关闭电源", + "dc_power_control_voltage": "电压", + "dc_power_control_voltage_unit": "五", + "dc_power_control_current": "安培", + "dc_power_control_current_unit": "一个", + "dc_power_control_power": "瓦特", + "dc_power_control_power_unit": "西", + "serial_console_get_state_error": "无法获取串行控制台设置: {error}", + "serial_console_set_power_state_error": "无法将串行控制台设置设置为{settings} : {error}", + "serial_console_configure_description": "配置串行控制台设置", + "serial_console_open_console": "打开控制台", + "serial_console_baud_rate": "波特率", + "serial_console_data_bits": "数据位", + "serial_console_stop_bits": "停止位", + "serial_console_parity": "平价", + "serial_console_parity_even": "偶校验", + "serial_console_parity_odd": "奇校验", + "serial_console_parity_none": "无奇偶校验", + "serial_console_parity_mark": "马克·帕里蒂", + "serial_console_parity_space": "空间平价" } \ No newline at end of file diff --git a/ui/project.inlang/settings.json b/ui/project.inlang/settings.json index d77a9d8f..0ce494ad 100644 --- a/ui/project.inlang/settings.json +++ b/ui/project.inlang/settings.json @@ -1,8 +1,7 @@ { "$schema": "https://inlang.com/schema/project-settings", "baseLocale": "en", - "sourceLanguageTag": "en", - "languageTags": [ + "locales": [ "en", "da", "de", diff --git a/ui/src/components/extensions/ATXPowerControl.tsx b/ui/src/components/extensions/ATXPowerControl.tsx index 323e2419..a7016001 100644 --- a/ui/src/components/extensions/ATXPowerControl.tsx +++ b/ui/src/components/extensions/ATXPowerControl.tsx @@ -1,13 +1,13 @@ import { LuHardDrive, LuPower, LuRotateCcw } from "react-icons/lu"; import { useEffect, useState } from "react"; +import { m } from "@/paraglide/messages.js"; +import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc"; import { Button } from "@components/Button"; import Card from "@components/Card"; +import LoadingSpinner from "@components/LoadingSpinner"; import { SettingsPageHeader } from "@components/SettingsPageheader"; import notifications from "@/notifications"; -import LoadingSpinner from "@/components/LoadingSpinner"; - -import { JsonRpcResponse, useJsonRpc } from "../../hooks/useJsonRpc"; const LONG_PRESS_DURATION = 3000; // 3 seconds for long press @@ -33,9 +33,7 @@ export function ATXPowerControl() { useEffect(() => { send("getATXState", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to get ATX state: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.atx_power_control_get_state_error({ error: resp.error.data || m.unknown_error() })); return; } setAtxState(resp.result as ATXState); @@ -56,9 +54,7 @@ export function ATXPowerControl() { console.log("Sending long press ATX power action"); send("setATXPowerAction", { action: "power-long" }, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to send ATX power action: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.atx_power_control_send_action_error({ action: m.atx_power_control_long_power_button(), error: resp.error.data || m.unknown_error() })); } setIsPowerPressed(false); }); @@ -77,9 +73,7 @@ export function ATXPowerControl() { console.log("Sending short press ATX power action"); send("setATXPowerAction", { action: "power-short" }, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to send ATX power action: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.atx_power_control_send_action_error({ action: m.atx_power_control_short_power_button(), error: resp.error.data || m.unknown_error() })); } }); } @@ -98,8 +92,8 @@ export function ATXPowerControl() { return (
{atxState === null ? ( @@ -115,7 +109,7 @@ export function ATXPowerControl() { size="SM" theme="light" LeadingIcon={LuPower} - text="Power" + text={m.atx_power_control_power_button()} onMouseDown={() => handlePowerPress(true)} onMouseUp={() => handlePowerPress(false)} onMouseLeave={() => handlePowerPress(false)} @@ -125,13 +119,11 @@ export function ATXPowerControl() { size="SM" theme="light" LeadingIcon={LuRotateCcw} - text="Reset" + text={m.atx_power_control_reset_button()} onClick={() => { send("setATXPowerAction", { action: "reset" }, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to send ATX power action: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.atx_power_control_send_action_error({ action: m.atx_power_control_reset_button(), error: resp.error.data || m.unknown_error() })); return; } }); @@ -150,7 +142,7 @@ export function ATXPowerControl() { atxState?.power ? "text-green-600" : "text-slate-300" }`} /> - Power LED + {m.atx_power_control_power_led()}
@@ -161,7 +153,7 @@ export function ATXPowerControl() { atxState?.hdd ? "text-blue-400" : "text-slate-300" }`} /> - HDD LED + {m.atx_power_control_hdd_led()}
diff --git a/ui/src/components/extensions/DCPowerControl.tsx b/ui/src/components/extensions/DCPowerControl.tsx index 7f950491..5199f490 100644 --- a/ui/src/components/extensions/DCPowerControl.tsx +++ b/ui/src/components/extensions/DCPowerControl.tsx @@ -1,14 +1,15 @@ import { LuPower } from "react-icons/lu"; import { useCallback, useEffect, useState } from "react"; +import { m } from "@/paraglide/messages.js"; +import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; import { Button } from "@components/Button"; import Card from "@components/Card"; import { SettingsPageHeader } from "@components/SettingsPageheader"; -import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; -import notifications from "@/notifications"; import FieldLabel from "@components/FieldLabel"; import LoadingSpinner from "@components/LoadingSpinner"; import {SelectMenuBasic} from "@components/SelectMenuBasic"; +import notifications from "@/notifications"; interface DCPowerState { isOn: boolean; @@ -25,9 +26,7 @@ export function DCPowerControl() { const getDCPowerState = useCallback(() => { send("getDCPowerState", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to get DC power state: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.dc_power_control_get_state_error({ error: resp.error.data || m.unknown_error() })); return; } setPowerState(resp.result as DCPowerState); @@ -37,9 +36,7 @@ export function DCPowerControl() { const handlePowerToggle = (enabled: boolean) => { send("setDCPowerState", { enabled }, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to set DC power state: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.dc_power_control_set_power_state_error({ enabled: enabled, error: resp.error.data || m.unknown_error() })); return; } getDCPowerState(); // Refresh state after change @@ -49,17 +46,13 @@ export function DCPowerControl() { // const state = powerState?.restoreState === 0 ? 1 : powerState?.restoreState === 1 ? 2 : 0; send("setDCRestoreState", { state }, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to set DC power state: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.dc_power_control_set_restore_state_error({ state: state, error: resp.error.data || m.unknown_error() })); return; } getDCPowerState(); // Refresh state after change }); }; - - useEffect(() => { getDCPowerState(); // Set up polling interval to update status @@ -70,8 +63,8 @@ export function DCPowerControl() { return (
{powerState === null ? ( @@ -87,7 +80,7 @@ export function DCPowerControl() { size="SM" theme="light" LeadingIcon={LuPower} - text="Power On" + text={m.dc_power_control_power_on_button()} onClick={() => handlePowerToggle(true)} disabled={powerState.isOn} /> @@ -95,7 +88,7 @@ export function DCPowerControl() { size="SM" theme="light" LeadingIcon={LuPower} - text="Power Off" + text={m.dc_power_control_power_off_button()} disabled={!powerState.isOn} onClick={() => handlePowerToggle(false)} /> @@ -104,13 +97,13 @@ export function DCPowerControl() {
handleRestoreChange(parseInt(e.target.value))} options={[ - { value: '0', label: "Power OFF" }, - { value: '1', label: "Power ON" }, - { value: '2', label: "Last State" }, + { value: '0', label: m.dc_power_control_power_off_state()}, + { value: '1', label: m.dc_power_control_power_on_state()}, + { value: '2', label: m.dc_power_control_restore_power_state() }, ]} />
@@ -120,21 +113,21 @@ export function DCPowerControl() { {/* Status Display */}
- +

- {powerState.voltage.toFixed(1)}V + {powerState.voltage.toFixed(1)} {m.dc_power_control_voltage_unit()}

- +

- {powerState.current.toFixed(1)}A + {powerState.current.toFixed(1)} {m.dc_power_control_current_unit()}

- +

- {powerState.power.toFixed(1)}W + {powerState.power.toFixed(1)} {m.dc_power_control_power_unit()}

diff --git a/ui/src/components/extensions/SerialConsole.tsx b/ui/src/components/extensions/SerialConsole.tsx index e36365ff..2891207e 100644 --- a/ui/src/components/extensions/SerialConsole.tsx +++ b/ui/src/components/extensions/SerialConsole.tsx @@ -1,13 +1,14 @@ -import { LuTerminal } from "react-icons/lu"; import { useEffect, useState } from "react"; +import { LuTerminal } from "react-icons/lu"; +import { m } from "@/paraglide/messages.js"; +import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc"; +import { useUiStore } from "@hooks/stores"; import { Button } from "@components/Button"; import Card from "@components/Card"; -import { SettingsPageHeader } from "@components/SettingsPageheader"; -import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; -import notifications from "@/notifications"; -import { useUiStore } from "@/hooks/stores"; import { SelectMenuBasic } from "@components/SelectMenuBasic"; +import { SettingsPageHeader } from "@components/SettingsPageheader"; +import notifications from "@/notifications"; interface SerialSettings { baudRate: string; @@ -28,9 +29,7 @@ export function SerialConsole() { useEffect(() => { send("getSerialSettings", {}, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to get serial settings: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.serial_console_get_settings_error({ error: resp.error.data || m.unknown_error() })); return; } setSettings(resp.result as SerialSettings); @@ -41,9 +40,7 @@ export function SerialConsole() { const newSettings = { ...settings, [setting]: value }; send("setSerialSettings", { settings: newSettings }, (resp: JsonRpcResponse) => { if ("error" in resp) { - notifications.error( - `Failed to update serial settings: ${resp.error.data || "Unknown error"}`, - ); + notifications.error(m.serial_console_set_settings_error({ settings: setting, error: resp.error.data || m.unknown_error() })); return; } setSettings(newSettings); @@ -54,8 +51,8 @@ export function SerialConsole() { return (
@@ -66,10 +63,10 @@ export function SerialConsole() { size="SM" theme="primary" LeadingIcon={LuTerminal} - text="Open Console" + text={m.serial_console_open_console()} onClick={() => { - setTerminalType("serial"); console.log("Opening serial console with settings: ", settings); + setTerminalType("serial"); }} />
@@ -77,7 +74,7 @@ export function SerialConsole() { {/* Settings */}
handleSettingChange("parity", e.target.value)} diff --git a/ui/src/components/popovers/ExtensionPopover.tsx b/ui/src/components/popovers/ExtensionPopover.tsx index f36c0503..5a9603d5 100644 --- a/ui/src/components/popovers/ExtensionPopover.tsx +++ b/ui/src/components/popovers/ExtensionPopover.tsx @@ -1,7 +1,8 @@ import { useEffect, useState } from "react"; import { LuPower, LuTerminal, LuPlugZap } from "react-icons/lu"; -import { JsonRpcResponse, useJsonRpc } from "@/hooks/useJsonRpc"; +import { m } from "@/paraglide/messages.js"; +import { JsonRpcResponse, useJsonRpc } from "@hooks/useJsonRpc"; import Card, { GridCard } from "@components/Card"; import { SettingsPageHeader } from "@components/SettingsPageheader"; import { ATXPowerControl } from "@components/extensions/ATXPowerControl"; @@ -20,20 +21,20 @@ interface Extension { const AVAILABLE_EXTENSIONS: Extension[] = [ { id: "atx-power", - name: "ATX Power Control", - description: "Control your ATX Power extension", + name: m.extensions_atx_power_control(), + description: m.extensions_atx_power_control_description(), icon: LuPower, }, { id: "dc-power", - name: "DC Power Control", - description: "Control your DC Power extension", + name: m.extensions_dc_power_control(), + description: m.extensions_dc_power_control(), icon: LuPlugZap, }, { id: "serial-console", - name: "Serial Console", - description: "Access your serial console extension", + name: m.extension_serial_console(), + description: m.extension_serial_console_description(), icon: LuTerminal, }, ]; @@ -60,7 +61,7 @@ export default function ExtensionPopover() { send("setActiveExtension", { extensionId: extension?.id || "" }, (resp: JsonRpcResponse) => { if ("error" in resp) { notifications.error( - `Failed to set active extension: ${resp.error.data || "Unknown error"}`, + m.extension_popover_set_error_notification({ error: resp.error.data || m.unknown_error() }), ); return; } @@ -101,7 +102,7 @@ export default function ExtensionPopover() {
@@ -110,8 +111,8 @@ export default function ExtensionPopover() { // Extensions List View
@@ -131,7 +132,7 @@ export default function ExtensionPopover() {
diff --git a/ui/tsconfig.json b/ui/tsconfig.json index b1c4089e..c223dd28 100644 --- a/ui/tsconfig.json +++ b/ui/tsconfig.json @@ -26,7 +26,8 @@ "erasableSyntaxOnly": true, "noUncheckedSideEffectImports": true, "types": [ - "vite/client" + "vite/client", + "./src/paraglide/messages.js" ], /* Import Aliases */ "paths": {