diff --git a/.gitignore b/.gitignore index e5e7498e..8ef24cd3 100644 --- a/.gitignore +++ b/.gitignore @@ -234,3 +234,5 @@ backend/pb_public/* dist/ vite.config.js.timestamp* + +frontend/src/lib/paraglide diff --git a/frontend/.typesafe-i18n.json b/frontend/.typesafe-i18n.json deleted file mode 100644 index e2aae86e..00000000 --- a/frontend/.typesafe-i18n.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "adapter": "svelte", - "$schema": "https://unpkg.com/typesafe-i18n@5.26.2/schema/typesafe-i18n.json", - "outputPath": "./src/lib/i18n/" -} diff --git a/frontend/messages/de.json b/frontend/messages/de.json new file mode 100644 index 00000000..d4216619 --- /dev/null +++ b/frontend/messages/de.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Admin", + "account_account_type_user": "Benutzer", + "account_avatar_title": "Avatar", + "account_change_password_body": "Nachdem das Passwort geändert wurde, musst du dich neu einloggen.", + "account_change_password_confirm": "Password bestätigen", + "account_change_password_label": "Altes Passwort", + "account_change_password_new": "Neues Password", + "account_change_password_title": "Passwort ändern", + "account_language_title": "Sprache", + "account_page_title": "Account", + "buttons_add": "Hinzufügen", + "buttons_cancel": "Abbrechen", + "buttons_change": "Ändern", + "buttons_confirm": "Bestätigen", + "buttons_delete": "Löschen", + "buttons_reset": "Zurücksetzen", + "buttons_save": "Speichern", + "device_card_btn_more_edit": "Bearbeiten", + "device_card_btn_more_reboot": "Neustart", + "device_card_btn_more_sleep": "Ruhezustand", + "device_card_btn_more": "Mehr", + "device_card_nic_tooltip_pending": "Warten", + "device_card_nic_tooltip_power_no_permission": "Keine Berechtigung zum einschalten", + "device_card_nic_tooltip_power": "Einschalten", + "device_card_nic_tooltip_shutdown_no_cmd": "Kein Ausschaltbefehl gesetzt", + "device_card_nic_tooltip_shutdown_no_permission": "Keine Berechtigung zum ausschalten", + "device_card_nic_tooltip_shutdown": "Ausschalten", + "device_card_password": "Passwort", + "device_card_tooltip_last_status_change": "Letzte Statusänderung", + "device_card_tooltip_shutdown_cron": "Ausschalten Cron", + "device_card_tooltip_wake_cron": "Einschalten Cron", + "device_card_tooltip_wake_password": "Einschalten Passwort", + "device_general_description_placeholder": "Eine Beschreibung des Geräts", + "device_general_description": "Beschreibung", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Name", + "device_general_netmask": "Netmask", + "device_general_required_field": "Pflichtfeld", + "device_general": "Allgemein", + "device_groups_desc": "Du kannst Geräte einer Gruppe hinzufügen, um sie auf dem Dashboard nach Gruppen sortiert anzuzeigen.", + "device_groups_placeholder": "z.B. 'Keller' or 'Büro'", + "device_groups": "Gruppen", + "device_link_desc": "Macht Ihren Gerätenamen zu einem anklickbaren Link, ideal zum Beispiel für die Verknüpfung eines Dashboards.", + "device_link_open_new_tab": "Neuer Tab", + "device_link_open_no": "Nein", + "device_link_open_same_tab": "Selber Tab", + "device_link_open": "Automatisch Link öffnen", + "device_link": "Link", + "device_modal_confirm_shutdown_desc": "Bitte bestätigen, um {device} herunterzufahren.", + "device_modal_confirm_shutdown_title": "{device} herunterfahren?", + "device_modal_confirm_wake_desc": "Bitte bestätigen, um {device} einzuschalten.", + "device_modal_confirm_wake_title": "{device} einschalten?", + "device_network_scan_add_all": "Alle Geräte hinzufügen", + "device_network_scan_desc": "Automatisches Scannen deines Netzwerks nach Geräten. Damit dies funktioniert, musst du UpSnap als Administrator/root ausführen und nmap installiert und im $PATH verfügbar haben (Für Docker-Benutzer ist das bereits der Fall, und du musst nichts weiter tun). Das Scannen kann einige Sekunden dauern.", + "device_network_scan_include_unknown": "Schließe Geräte ein, bei denen der Name 'Unknown' ist.", + "device_network_scan_ip_range": "IP-Bereich", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Mac Hersteller:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Netmask:", + "device_network_scan_new_netmask": "Neue Netmask", + "device_network_scan_no_range": "Kein Scan-Bereich", + "device_network_scan_range_saved": "Scan-Bereich gespeichert", + "device_network_scan_replace_netmask": "Netmask für alle Geräte ändern?", + "device_network_scan_running": "Scan läuft", + "device_network_scan_unsaved_changes": "Ungespeicherte Änderungen", + "device_network_scan": "Scan", + "device_page_title": "Neues Gerät", + "device_password_desc": "Einige Netzwerkkarten bieten die Möglichkeit, ein Passwort für Magic Packets zu setzen, auch SecureON genannt. Das Passwort kann nur 0, 4 oder 6 Zeichen lang sein.", + "device_password": "Password", + "device_ping_cmd": "Eigener Ping-Befehl", + "device_ping_desc": "Du kannst einen benutzerdefinierten Shell-Befehl verwenden, um festzustellen, ob das Gerät eingeschaltet ist. Der Befehl sollte einen Exit-Code von 0 zurückgeben, um anzuzeigen, dass das Gerät eingeschaltet ist. Jeder andere Exit-Code setzt den Status auf offline.", + "device_ping": "Ping", + "device_ports_add_new": "Port hinzufügen", + "device_ports_desc": "UpSnap kann auch prüfen, ob bestimmte Ports offen sind.", + "device_ports_name": "Name", + "device_ports_number": "Nummer", + "device_ports": "Ports", + "device_require_confirmation": "Bestätigung erforderlich", + "device_shutdown_cmd": "Befehl zum ausschalten", + "device_shutdown_cron_desc": "Genau wie das Einrichten eines Cron-Jobs, um das Gerät aufzuwecken, kannst du auch einen Cron-Job planen, um dieses Gerät herunterzufahren.", + "device_shutdown_cron_enable": "Aktivieren", + "device_shutdown_cron": "Cron", + "device_shutdown_desc": "Dieser Shell-Befehl wird in deinem Container ausgeführt (wenn du Docker verwendest) oder auf deinem Host (wenn du die Binärdatei verwendest). Um zu überprüfen, ob das funktioniert, kannst du den Befehl zuerst im Container oder auf deiner Host-Shell ausführen. Übliche Befehle sind net rpc für Windows, sshpass für Linux oder curl im Allgemeinen, um Webanfragen durchzuführen.", + "device_shutdown_examples_linux": "Entfernten Linux PC ausschalten:", + "device_shutdown_examples_windows": "Entfernten Windows PC ausschalten:", + "device_shutdown_examples": "Beispiele:", + "device_shutdown": "Ausschalten", + "device_sol_authorization": "Authorisierung", + "device_sol_desc1": "Du kannst Computer mithilfe des Tools Sleep-On-LAN in den Ruhezustand versetzen. Sleep-On-LAN (SOL) ist ein externes Tool/Daemon, das auf den PCs arbeitet, die du in den Ruhezustand versetzen möchtest, und stellt einen REST-Endpunkt bereit. Für Anweisungen zur Einrichtung von Sleep-On-LAN verweise bitte auf den Abschnitt Usage.", + "device_sol_desc2": "SOL ist so konfiguriert, dass es Anfragen über HTTP statt über UDP sendet, um eine Autorisierung zu ermöglichen und die Zuverlässigkeit der Anfragen zu erhöhen.", + "device_sol_desc3": "Daher stell bitte sicher, dass du HTTP:<DEINPORT> im Abschnitt Listener der SOL-Konfiguration hinzufügst.", + "device_sol_enable": "Sleep-On-LAN aktivieren", + "device_sol_password": "SOL Passwort", + "device_sol_port": "SOL Port", + "device_sol_user": "SOL Benutzer", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manuell", + "device_tabs.1": "Netzwerkscan", + "device_wake_cmd": "Eigener Einschalt-Befehl", + "device_wake_cron_enable": "Aktivieren", + "device_wake_cron": "Cron", + "device_wake_desc": "Du kannst das Gerät mit einem Cron-Job einschalten.", + "device_wake": "Einschalten", + "home_add_first_device": "Füge dein erstes Gerät hinzu", + "home_grant_permissions": "Bitte frag den Administrator, dir Berechtigungen für bestehende Geräte zu erteilen oder neue Geräte zu erstellen.", + "home_no_devices": "Keine Geräte.", + "home_order_groups": "Gruppen", + "home_order_ip": "IP", + "home_order_name": "Name", + "home_order_tooltip": "Sortieren", + "home_page_title": "Home", + "home_search_placeholder": "Suche nach Geräten", + "login_btn_login": "Login", + "login_btn_more": "Mehr", + "login_email_label": "Email oder Nutzername:", + "login_menu_title_auth_providers": "Andere Login Provider", + "login_password_label": "Passwort:", + "login_welcome": "Willkommen", + "navbar_edit_account": "Account bearbeiten", + "navbar_logout": "Abmelden", + "navbar_new": "Neu", + "navbar_theme": "Theme", + "settings_icon_desc": "Eigenes Favicon nutzen. Unterstützte Dateitypen sind:", + "settings_icon_title": "Icon", + "settings_invalid_cron": "Ungültige cron Syntax", + "settings_lazy_ping_desc": "Wenn Lazy Ping aktiviert ist, pingt UpSnap die Geräte nur an, wenn ein aktiver Benutzer die Website besucht. Wenn es ausgeschaltet ist, pingt UpSnap die Geräte immer an.", + "settings_lazy_ping_enable": "Aktivieren", + "settings_lazy_ping_title": "Lazy Ping", + "settings_page_title": "Einstellungen", + "settings_ping_interval_desc1": "Legt den Intervall fest, in dem Geräte gepingt werden. Leer lassen um den Standardwert von @every 3s zu verwenden.", + "settings_ping_interval_desc2": "Lerne mehr über die korrekte Cron Syntax auf Wikipedia oder sieh dir die Paketdokumentation an.", + "settings_ping_interval_title": "Ping Intervall", + "settings_upsnap_version": "UpSnap Version", + "settings_website_title_desc": "Setzt den Seiten- und den Tabtitel.", + "settings_website_title_title": "Seitentitel", + "toasts_admin_saved": "Admin gespeichert", + "toasts_device_created": "{device} erstellt", + "toasts_device_deleted": "{device} gelöscht", + "toasts_device_updated": "{device} geändert", + "toasts_devices_created_multiple": "{count} Geräte erstellt", + "toasts_group_created": "Gruppe {group} erstellt", + "toasts_group_deleted": "Gruppe {group} gelöscht", + "toasts_no_permission": "Du hast keine Berechtigung für {url}", + "toasts_password_changed": "Passwort geändert. Bitte neu einloggen.", + "toasts_passwords_missmatch": "Passwörter stimmen nicht überein", + "toasts_permissions_created": "Berechtigungen für {username} erstellt", + "toasts_permissions_deleted": "Berechtigungen für {username} gelöscht", + "toasts_permissions_updated_personal": "Deine Berechtigungen wurden aktualisiert", + "toasts_permissions_updated": "Berechtigungen für {username} geändert", + "toasts_settings_saved": "Einstellungen gespeichert", + "toasts_user_created": "Benutzer {username} erstellt", + "toasts_user_deleted": "Benutzer {username} gelöscht", + "toasts_user_saved": "Benutzer gespeichert", + "users_allow_create_devices": "{username} erlauben neue Geräte zu erstellen und Gerätegruppen zu bearbeiten", + "users_confirm_delete_desc": "Soll {username} wirklich gelöscht werden?", + "users_confirm_delete_title": "Löschen bestätigen", + "users_create_new_device": "Neues Gerät erstellen", + "users_create_new_user": "Neuen Benutzer erstellen", + "users_delete": "Löschen", + "users_device_permissions": "Geräteberechtigungen", + "users_page_title": "Benutzer", + "users_password_confirm": "Passwort bestätigen", + "users_password": "Passwort", + "users_power": "Power", + "users_read": "Lesen", + "users_required_field": "Pflichtfeld", + "users_toggle": "Toggle", + "users_update": "Ändern", + "users_username": "Benutzername", + "welcome_not_expected_back": "Bring mich zurück", + "welcome_not_expected_desc": "Du hast die Einrichtung bereits abgeschlossen! Hier gibt es nichts zu tun.", + "welcome_not_expected_title": "Ich hab dich hier nicht erwartet! 🧐", + "welcome_progress_step1": "Willkommen", + "welcome_progress_step2": "Account erstellen", + "welcome_progress_step3": "Fertig", + "welcome_step1_page_title": "Willkommen bei UpSnap 🥳", + "welcome_step1_setup_btn_next": "Weiter", + "welcome_step1_setup_desc": "Bitte schließe die nachfolgenden Schritte ab, um die Einrichtung abzuschließen.", + "welcome_step2_btn_create": "Erstellen", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "min. 10 Zeichen", + "welcome_step2_label_password_confirm": "Passwort bestätigen:", + "welcome_step2_label_password": "Passwort:", + "welcome_step2_page_title": "Erstelle einen Admin Account", + "welcome_step3_btn_done": "Los geht's!", + "welcome_step3_page_desc": "Füge Geräte zu deinem Dashboard hinzu.", + "welcome_step3_page_title": "Du bist fertig! 🎉" +} diff --git a/frontend/messages/en.json b/frontend/messages/en.json new file mode 100644 index 00000000..d7e41fef --- /dev/null +++ b/frontend/messages/en.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Admin", + "account_account_type_user": "User", + "account_avatar_title": "Avatar", + "account_change_password_body": "After the password has been changed, you will need to log in again.", + "account_change_password_confirm": "Confirm password", + "account_change_password_label": "Old password", + "account_change_password_new": "New password", + "account_change_password_title": "Change password", + "account_language_title": "Language", + "account_page_title": "Account", + "buttons_add": "Add", + "buttons_cancel": "Cancel", + "buttons_change": "Change", + "buttons_confirm": "Confirm", + "buttons_delete": "Delete", + "buttons_reset": "Reset", + "buttons_save": "Save", + "device_card_btn_more_edit": "Edit", + "device_card_btn_more_reboot": "Reboot", + "device_card_btn_more_sleep": "Sleep", + "device_card_btn_more": "More", + "device_card_nic_tooltip_pending": "Pending", + "device_card_nic_tooltip_power_no_permission": "No permission to power on this device", + "device_card_nic_tooltip_power": "Power on", + "device_card_nic_tooltip_shutdown_no_cmd": "No shutdown command set", + "device_card_nic_tooltip_shutdown_no_permission": "No permission to shut down this device", + "device_card_nic_tooltip_shutdown": "Shut down", + "device_card_password": "Password", + "device_card_tooltip_last_status_change": "Last status change", + "device_card_tooltip_shutdown_cron": "Shutdown cron", + "device_card_tooltip_wake_cron": "Wake cron", + "device_card_tooltip_wake_password": "Wake password", + "device_general_description_placeholder": "Some description of the device", + "device_general_description": "Description", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Name", + "device_general_netmask": "Netmask", + "device_general_required_field": "required field", + "device_general": "General", + "device_groups_desc": "You can add devices to a group to have them sorted by group on the dashboard.", + "device_groups_placeholder": "e.g. 'Basement' or 'Office'", + "device_groups": "Groups", + "device_link_desc": "Makes your device name a clickable link, perfect for linking a dashboard for example.", + "device_link_open_new_tab": "New tab", + "device_link_open_no": "No", + "device_link_open_same_tab": "Same tab", + "device_link_open": "Automatically open link", + "device_link": "Link", + "device_modal_confirm_shutdown_desc": "Please confirm to shutdown {device}.", + "device_modal_confirm_shutdown_title": "Shutdown {device}?", + "device_modal_confirm_wake_desc": "Please confirm to wake {device}.", + "device_modal_confirm_wake_title": "Wake {device}?", + "device_network_scan_add_all": "Add all devices", + "device_network_scan_desc": "Automatically scan your network for devices. For this to work, you need to run UpSnap as root/admin and have nmap installed and available in your $PATH (For docker users, thats already the case and you don't need to do anything). Scanning might take some seconds.", + "device_network_scan_include_unknown": "Include devices where name is \"Unknown\"", + "device_network_scan_ip_range": "IP range", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Mac vendor:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Netmask:", + "device_network_scan_new_netmask": "New netmask", + "device_network_scan_no_range": "No scan range", + "device_network_scan_range_saved": "Scan range saved", + "device_network_scan_replace_netmask": "Replace netmask for all devices?", + "device_network_scan_running": "Scan running", + "device_network_scan_unsaved_changes": "Unsaved changes", + "device_network_scan": "Scan", + "device_page_title": "New device", + "device_password_desc": "Some network cards have the option to set a password for magic packets, also called SecureON. Password can only be 0, 4 or 6 characters in length.", + "device_password": "Password", + "device_ping_cmd": "Custom ping command", + "device_ping_desc": "You can use a custom shell command to see if the device is powered on. The command should return an exit code of 0 to indicate that the device is powered on, any other exit code will mark the device as powered off.", + "device_ping": "Ping", + "device_ports_add_new": "Add new port", + "device_ports_desc": "UpSnap can also check if given ports are open.", + "device_ports_name": "Name", + "device_ports_number": "Number", + "device_ports": "Ports", + "device_require_confirmation": "Require Confirmation", + "device_shutdown_cmd": "Shutdown command", + "device_shutdown_cron_desc": "Just like setting a cron to wake the device, you can also schedule a cron job to shut down this device.", + "device_shutdown_cron_enable": "Enable shutdown cron", + "device_shutdown_cron": "Shutdown cron", + "device_shutdown_desc": "This shell command will run inside your container (if you use docker) or on your host (if you use the binary). To verify that it works, you can run the command inside the container or on your host shell first. Common commands are net rpc for windows, sshpass for linux or curl in general to make web requests.", + "device_shutdown_examples_linux": "Shutdown remote linux machine:", + "device_shutdown_examples_windows": "Shutdown remote windows machine:", + "device_shutdown_examples": "Examples:", + "device_shutdown": "Shutdown", + "device_sol_authorization": "Authorization", + "device_sol_desc1": "You can put computers to sleep using the Sleep-On-LAN tool. Sleep-On-LAN (SOL) is an external tool/daemon that operates on the PCs you want to put to sleep, providing a REST endpoint. For instructions on setting up Sleep-On-LAN, please refer to the Usage section.", + "device_sol_desc2": "SOL is configured to send requests over HTTP instead of UDP to enable authorization and make requests more reliable.", + "device_sol_desc3": "Therefore, please ensure that you include HTTP:<YOURPORT> in the Listeners section of the SOL configuration.", + "device_sol_enable": "Enable Sleep-On-LAN", + "device_sol_password": "SOL Password", + "device_sol_port": "SOL Port", + "device_sol_user": "SOL User", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manual", + "device_tabs.1": "Network Scan", + "device_wake_cmd": "Custom wake command", + "device_wake_cron_enable": "Enable wake cron", + "device_wake_cron": "Wake cron", + "device_wake_desc": "You can power this device using a scheduled cron job.", + "device_wake": "Wake", + "home_add_first_device": "Add your first device", + "home_grant_permissions": "Please ask the admin to grant you permissions to existing devices or to create new ones.", + "home_no_devices": "No devices here.", + "home_order_groups": "Groups", + "home_order_ip": "IP", + "home_order_name": "Name", + "home_order_tooltip": "Order", + "home_page_title": "Home", + "home_search_placeholder": "Search for devices", + "login_btn_login": "Login", + "login_btn_more": "More", + "login_email_label": "Email or Username:", + "login_menu_title_auth_providers": "Other Auth Providers", + "login_password_label": "Password:", + "login_welcome": "Welcome", + "navbar_edit_account": "Edit account", + "navbar_logout": "Logout", + "navbar_new": "New", + "navbar_theme": "Theme", + "settings_icon_desc": "Set a custom favicon. Supported file types are:", + "settings_icon_title": "Icon", + "settings_invalid_cron": "Invalid cron syntax", + "settings_lazy_ping_desc": "When lazy ping is turned on, UpSnap will only ping devices if there is an active user visiting the website. If it's turned off, UpSnap will always ping devices.", + "settings_lazy_ping_enable": "Enable", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "Settings", + "settings_ping_interval_desc1": "Sets the interval in which the devices are pinged. Leave blank to use default value of @every 3s.", + "settings_ping_interval_desc2": "Learn more about the correct syntax for cron on Wikipedia or refer to the package documentation.", + "settings_ping_interval_title": "Ping interval", + "settings_upsnap_version": "UpSnap version", + "settings_website_title_desc": "Sets the title of the website and in the browser tab.", + "settings_website_title_title": "Website title", + "toasts_admin_saved": "Admin saved", + "toasts_device_created": "Created {device}", + "toasts_device_deleted": "Deleted {device}", + "toasts_device_updated": "Updated {device}", + "toasts_devices_created_multiple": "Created {count} devices", + "toasts_group_created": "Created group {group}", + "toasts_group_deleted": "Deleted group {group}", + "toasts_no_permission": "You don't have permission to visit {url}", + "toasts_password_changed": "Password changed. Please login again.", + "toasts_passwords_missmatch": "Passwords don't match", + "toasts_permissions_created": "Permissions for {username} created", + "toasts_permissions_deleted": "Permissions for {username} deleted", + "toasts_permissions_updated_personal": "Your permissions have been updated", + "toasts_permissions_updated": "Permissions for {username} updated", + "toasts_settings_saved": "Saved settings", + "toasts_user_created": "User {username} created", + "toasts_user_deleted": "User {username} deleted", + "toasts_user_saved": "User saved", + "users_allow_create_devices": "Allow {username} to create new devices and edit device groups", + "users_confirm_delete_desc": "Are you sure you want to delete {username}?", + "users_confirm_delete_title": "Confirm delete", + "users_create_new_device": "Create new device", + "users_create_new_user": "Create new user", + "users_delete": "Delete", + "users_device_permissions": "Device permissions", + "users_page_title": "Users", + "users_password_confirm": "Password confirm", + "users_password": "Password", + "users_power": "Power", + "users_read": "Read", + "users_required_field": "required field", + "users_toggle": "Toggle", + "users_update": "Update", + "users_username": "Username", + "welcome_not_expected_back": "Take me back", + "welcome_not_expected_desc": "You are already done with the setup! Nothing to do.", + "welcome_not_expected_title": "I didn't expect you here! 🧐", + "welcome_progress_step1": "Welcome", + "welcome_progress_step2": "Create account", + "welcome_progress_step3": "Done", + "welcome_step1_page_title": "Welcome to UpSnap 🥳", + "welcome_step1_setup_btn_next": "Next", + "welcome_step1_setup_desc": "Please complete the following steps to finish the setup.", + "welcome_step2_btn_create": "Create", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "min. 10 characters", + "welcome_step2_label_password_confirm": "Password confirm:", + "welcome_step2_label_password": "Password:", + "welcome_step2_page_title": "Create an admin account", + "welcome_step3_btn_done": "Lets go!", + "welcome_step3_page_desc": "Go ahead and add some devices to your dashboard.", + "welcome_step3_page_title": "You are all set! 🎉" +} diff --git a/frontend/messages/es.json b/frontend/messages/es.json new file mode 100644 index 00000000..a9ee568e --- /dev/null +++ b/frontend/messages/es.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Admin", + "account_account_type_user": "Usuario", + "account_avatar_title": "Avatar", + "account_change_password_body": "Después de cambiar la contraseña, deberá iniciar sesión nuevamente.", + "account_change_password_confirm": "Confirmar contraseña", + "account_change_password_label": "Antigua contraseña", + "account_change_password_new": "Nueva contraseña", + "account_change_password_title": "Cambiar contraseña", + "account_language_title": "Idioma", + "account_page_title": "Cuenta", + "buttons_add": "Añadir", + "buttons_cancel": "Cancelar", + "buttons_change": "Alterar", + "buttons_confirm": "Confirmar", + "buttons_delete": "Eliminar", + "buttons_reset": "Reiniciar", + "buttons_save": "Guardar", + "device_card_btn_more_edit": "Editar", + "device_card_btn_more_reboot": "Reiniciar", + "device_card_btn_more_sleep": "Suspender", + "device_card_btn_more": "Más", + "device_card_nic_tooltip_pending": "Pendiente", + "device_card_nic_tooltip_power_no_permission": "No tienes permiso para encender este dispositivo", + "device_card_nic_tooltip_power": "Encender", + "device_card_nic_tooltip_shutdown_no_cmd": "El comando de apagado no está definido", + "device_card_nic_tooltip_shutdown_no_permission": "No tienes permiso para apagar este dispositivo", + "device_card_nic_tooltip_shutdown": "Apagar", + "device_card_password": "Contraseña", + "device_card_tooltip_last_status_change": "Último cambio de estado", + "device_card_tooltip_shutdown_cron": "Shutdown cron", + "device_card_tooltip_wake_cron": "Wake cron", + "device_card_tooltip_wake_password": "Wake password", + "device_general_description_placeholder": "Descripción del dispositivo", + "device_general_description": "Descripción", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Nombre", + "device_general_netmask": "Máscara de red", + "device_general_required_field": "Campo obligatorio", + "device_general": "General", + "device_groups_desc": "Puede agregar dispositivos a un grupo para ordenarlos por grupo en el dashboard.", + "device_groups_placeholder": "e.g. 'Basement' o 'Office'", + "device_groups": "Grupos", + "device_link_desc": "Permite que el nombre de su dispositivo sea un enlace. Perfecto para dashboard, por ejemplo.", + "device_link_open_new_tab": "Nueva pestaña", + "device_link_open_no": "No", + "device_link_open_same_tab": "Misma pestaña", + "device_link_open": "Abrir enlace automáticamente", + "device_link": "Link", + "device_modal_confirm_shutdown_desc": "Por favor confirme para apagar {device}.", + "device_modal_confirm_shutdown_title": "{device} apagar?", + "device_modal_confirm_wake_desc": "Confirme para activar {device}.", + "device_modal_confirm_wake_title": "{device} activar?", + "device_network_scan_add_all": "Añadir todos los dispositivos", + "device_network_scan_desc": "Escanee automáticamente su red en busca de dispositivos. Para que esto funcione, necesita ejecutar UpSnap como root/admin y tener nmap instalado y disponible en su $PATH (para los usuarios de Docker, ese ya es el caso y no necesitan hacer nada). El escaneo puede tardar algunos segundos.", + "device_network_scan_include_unknown": "Incluir dispositivos donde este el nombre 'Unknown'", + "device_network_scan_ip_range": "Rango IP", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Proveedor Mac:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Máscara de red:", + "device_network_scan_new_netmask": "Nueva máscara de red", + "device_network_scan_no_range": "Sin rango de escaneo", + "device_network_scan_range_saved": "Rango de escaneo guardado", + "device_network_scan_replace_netmask": "Reemplazar máscara de red para todos los dispositivos?", + "device_network_scan_running": "Escaneo en curso", + "device_network_scan_unsaved_changes": "Cambios sin guardar", + "device_network_scan": "Escaneo", + "device_page_title": "Nuevo dispositivo", + "device_password_desc": "Algunos adaptadores de red tienen la opción de definir una contraseña para magic pockets, también conocidos como SecureON. la contraseña sólo podrá contener 0, 4 o 6 caracteres.", + "device_password": "Contraseña", + "device_ping_cmd": "Comando ping personalizado", + "device_ping_desc": "Puede utilizar un comando de shell personalizado para ver si el dispositivo está conectado. El comando debe devolver un código de salida de 0 para indicar que el dispositivo está encendido; cualquier otro código de salida marcará el dispositivo como apagado.", + "device_ping": "Ping", + "device_ports_add_new": "Añadir nuevo puerto", + "device_ports_desc": "UpSnap puede comprobar si ciertos puertos están abiertos.", + "device_ports_name": "Nombre", + "device_ports_number": "Número", + "device_ports": "Puertos", + "device_require_confirmation": "Requiere confirmación", + "device_shutdown_cmd": "Comando para Apagar", + "device_shutdown_cron_desc": "Al igual que configurar un cron para encender el dispositivo, también puede programar un cron job para apagar este dispositivo.", + "device_shutdown_cron_enable": "Activar apagado de cron", + "device_shutdown_cron": "Apagar cron", + "device_shutdown_desc": "Este comando de shell se ejecutará dentro de su contenedor (si usa Docker) o en su host (si usa el binario). Para verificar que funciona, primero puede ejecutar el comando dentro del contenedor o en el shell de su host. Los comandos comunes son net rpc para Windows, sshpass para Linux o curl en general para realizar solicitudes web.", + "device_shutdown_examples_linux": "Apagar el dispositivo Linux remoto:", + "device_shutdown_examples_windows": "Apagar el dispositivo Windows remoto:", + "device_shutdown_examples": "Ejemplos:", + "device_shutdown": "Apagar", + "device_sol_authorization": "Autorización", + "device_sol_desc1": "Puedes poner las computadoras en modo de suspensión usando Sleep-On-LAN herramienta. Sleep-On-LAN (SOL) es una herramienta/daemon externo que opera en las PC que desea poner en suspensión y proporciona un punto final REST. Para obtener instrucciones sobre cómo configurar Sleep-On-LAN, consulte Uso sección.", + "device_sol_desc2": "SOL está configurado para enviar solicitudes a través de HTTP en lugar de UDP para permitir la autorización y hacer que las solicitudes sean más confiables.", + "device_sol_desc3": "Por lo tanto, asegúrese de incluir HTTP:<YOURPORT> en la sección Oyentes de configuración SOL.", + "device_sol_enable": "Activar Sleep-On-LAN", + "device_sol_password": "Contraseña SOL", + "device_sol_port": "Puerto SOL", + "device_sol_user": "Usuario SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manual", + "device_tabs.1": "búsqueda de red", + "device_wake_cmd": "Comando de encendido personalizado", + "device_wake_cron_enable": "Activar wake cron", + "device_wake_cron": "Encender cron", + "device_wake_desc": "Podrá encender este dispositivo utilizando un scheduled cron job.", + "device_wake": "Encender", + "home_add_first_device": "Añade tu primer dispositivo", + "home_grant_permissions": "Pídale al administrador que le otorgue permisos para los dispositivos existentes o que cree otros nuevos.", + "home_no_devices": "Sin dispositivos.", + "home_order_groups": "Grupos", + "home_order_ip": "IP", + "home_order_name": "Nombre", + "home_order_tooltip": "Orden", + "home_page_title": "Inicio", + "home_search_placeholder": "Buscar dispositivos", + "login_btn_login": "Entrar", + "login_btn_more": "Más", + "login_email_label": "Email o Nombre de usuario:", + "login_menu_title_auth_providers": "Otros proveedores de autenticación", + "login_password_label": "Contraseña:", + "login_welcome": "Bienvenido", + "navbar_edit_account": "Editar cuenta", + "navbar_logout": "Salir", + "navbar_new": "Nuevo", + "navbar_theme": "Tema", + "settings_icon_desc": "Establece un favicon personalizado. Los tipos de archivos admitidos son:", + "settings_icon_title": "Icon", + "settings_invalid_cron": "Sintaxis cron no válida", + "settings_lazy_ping_desc": "Cuando el ping diferido está activado, UpSnap solo hará ping a los dispositivos si hay un usuario activo visitando el sitio web. Si está desactivado, UpSnap siempre hará ping a los dispositivos.", + "settings_lazy_ping_enable": "Activar", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "Ajustes", + "settings_ping_interval_desc1": "Establece el intervalo en el que se realiza el ping. Déjelo en blanco para usar el valor predeterminado de @every 3s.", + "settings_ping_interval_desc2": "Puedes ver la sintaxis correcta para cron en Wikipedia o en documentación cron.", + "settings_ping_interval_title": "Intervalo ping", + "settings_upsnap_version": "Versión UpSnap", + "settings_website_title_desc": "Establece el título del sitio web y en la pestaña del navegador.", + "settings_website_title_title": "Titulo de la página", + "toasts_admin_saved": "Administrador guardado", + "toasts_device_created": "Creado {device}", + "toasts_device_deleted": "{device} apagado", + "toasts_device_updated": "{device} actualizado", + "toasts_devices_created_multiple": "Añadidos {count} dispositivos", + "toasts_group_created": "Grupo {group} creado", + "toasts_group_deleted": "Grupo {group} eliminado", + "toasts_no_permission": "Tu no tienes permiso para visitar {url}", + "toasts_password_changed": "Contraseña cambiada. Por favor acceda otra vez", + "toasts_passwords_missmatch": "Las contraseñas no coinciden", + "toasts_permissions_created": "Permisos creados para {username}", + "toasts_permissions_deleted": "Permisos para {username} eliminados", + "toasts_permissions_updated_personal": "Tus permisos han sido actualizados", + "toasts_permissions_updated": "Permisos para {username} actualizados", + "toasts_settings_saved": "Configuraciones guardadas", + "toasts_user_created": "Usuario {username} creado", + "toasts_user_deleted": "Usuario {username} eliminado", + "toasts_user_saved": "Usuario actualizado", + "users_allow_create_devices": "{username} permitir crear nuevos dispositivos y editar grupos de dispositivos", + "users_confirm_delete_desc": "Estás seguro que quieres borrar {username}?", + "users_confirm_delete_title": "Confirmar", + "users_create_new_device": "Añadir dispositivo", + "users_create_new_user": "Crear nuevo usuario", + "users_delete": "Eliminar", + "users_device_permissions": "Permisos del dispositivo", + "users_page_title": "Usuarios", + "users_password_confirm": "Confirmar contraseña", + "users_password": "Contraseña", + "users_power": "Energía", + "users_read": "Leer", + "users_required_field": "Campo obligatorio", + "users_toggle": "Alternar", + "users_update": "Editar", + "users_username": "Usuario", + "welcome_not_expected_back": "Llévame de vuelta", + "welcome_not_expected_desc": "Ya has terminado con la configuración! Nada que hacer!", + "welcome_not_expected_title": "No te esperaba por aquí! 🧐", + "welcome_progress_step1": "Bienvenido", + "welcome_progress_step2": "Crear cuenta", + "welcome_progress_step3": "Terminado", + "welcome_step1_page_title": "Bienvenido a UpSnap 🥳", + "welcome_step1_setup_btn_next": "Siguiente", + "welcome_step1_setup_desc": "Por favor complete los siguientes pasos para terminar la configuración.", + "welcome_step2_btn_create": "Crear", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "min. 10 caracteres", + "welcome_step2_label_password_confirm": "Confirmar contraseña:", + "welcome_step2_label_password": "Contraseña:", + "welcome_step2_page_title": "Crear cuenta de administrador", + "welcome_step3_btn_done": "Vamos!", + "welcome_step3_page_desc": "Añada algún dispositivo a su dashboard.", + "welcome_step3_page_title": "Ya está hecho! 🎉" +} diff --git a/frontend/messages/fr.json b/frontend/messages/fr.json new file mode 100644 index 00000000..3b996584 --- /dev/null +++ b/frontend/messages/fr.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Administrateur", + "account_account_type_user": "Utilisateur", + "account_avatar_title": "Avatar", + "account_change_password_body": "Après la modification du mot de passe, vous devrez vous reconnecter.", + "account_change_password_confirm": "Confirmation du mot de passe", + "account_change_password_label": "Ancien mot de passe", + "account_change_password_new": "Nouveau mot de passe", + "account_change_password_title": "Modification du mot de passe", + "account_language_title": "Langue", + "account_page_title": "Compte", + "buttons_add": "Ajouter", + "buttons_cancel": "Annuler", + "buttons_change": "Modifier", + "buttons_confirm": "Confirmer", + "buttons_delete": "Supprimer", + "buttons_reset": "Réinitialiser", + "buttons_save": "Sauvegarder", + "device_card_btn_more_edit": "Modifier", + "device_card_btn_more_reboot": "Redémarrer", + "device_card_btn_more_sleep": "Veille", + "device_card_btn_more": "Plus", + "device_card_nic_tooltip_pending": "En attente", + "device_card_nic_tooltip_power_no_permission": "Vous n'avez pas la permission pour allumer cet appareil", + "device_card_nic_tooltip_power": "Allumer", + "device_card_nic_tooltip_shutdown_no_cmd": "Aucune commande d'arrêt n'est définie", + "device_card_nic_tooltip_shutdown_no_permission": "Vous n'avez pas la permission pour éteindre cet appareil", + "device_card_nic_tooltip_shutdown": "Éteindre", + "device_card_password": "Mot de passe", + "device_card_tooltip_last_status_change": "Dernier changement de statut", + "device_card_tooltip_shutdown_cron": "Arrêt avec cron", + "device_card_tooltip_wake_cron": "Réveil avec cron", + "device_card_tooltip_wake_password": "Mot de passe de réveil", + "device_general_description_placeholder": "Description de l'appareil", + "device_general_description": "Description", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Nom", + "device_general_netmask": "Masque réseau", + "device_general_required_field": "champ requis", + "device_general": "Général", + "device_groups_desc": "Vous pouvez ajouter des appareils à un groupe pour pouvoir les trier sur le tableau de bord.", + "device_groups_placeholder": "par ex. « Bureau »", + "device_groups": "Groupes", + "device_link_desc": "Rend le nom de votre appareil cliquable, parfait pour y lier un tableau de bord par exemple.", + "device_link_open_new_tab": "Nouvel onglet", + "device_link_open_no": "Non", + "device_link_open_same_tab": "Même onglet", + "device_link_open": "Ouvrir automatiquement un lien", + "device_link": "Lien", + "device_modal_confirm_shutdown_desc": "Veuillez confirmer l'arrêt de {device}.", + "device_modal_confirm_shutdown_title": "Arrêter {device} ?", + "device_modal_confirm_wake_desc": "Veuillez confirmer le réveil de {device}.", + "device_modal_confirm_wake_title": "Réveiller {device} ?", + "device_network_scan_add_all": "Ajouter tous les appareils", + "device_network_scan_desc": "Analyser automatiquement votre réseau pour trouver des appareils. Pour que cela fonctionne, vous devez exécuter UpSnap en tant que root/administrateur et avoir nmap installé et disponible dans votre $PATH (pour les utilisateurs Docker, cela est déjà le cas et vous n'avez besoin de rien faire). L'analyse peut prendre quelques secondes.", + "device_network_scan_include_unknown": "Inclure les appareils dont le nom est « Inconnu »", + "device_network_scan_ip_range": "Plage IP", + "device_network_scan_ip": "IP :", + "device_network_scan_mac_vendor": "Fabricant ayant l'adresse Mac :", + "device_network_scan_mac": "Mac :", + "device_network_scan_netmask": "Masque réseau :", + "device_network_scan_new_netmask": "Nouveau masque réseau", + "device_network_scan_no_range": "Aucune plage d'analyse", + "device_network_scan_range_saved": "Plage d'analyse sauvegardée", + "device_network_scan_replace_netmask": "Remplacer le masque réseau pour tous les appareils ?", + "device_network_scan_running": "Analyse en cours", + "device_network_scan_unsaved_changes": "Modifications non sauvegardées", + "device_network_scan": "Analyser", + "device_page_title": "Nouvel appareil", + "device_password_desc": "Certaines cartes réseau ont l'option pour définir un mot de passe pour les paquets magiques, aussi appelée SecureON. Le mot de passe ne peut être que de 0, 4 ou 6 caractères.", + "device_password": "Mot de passe", + "device_ping_cmd": "Commande ping personnalisée", + "device_ping_desc": "Vous pouvez utiliser une commande shell personnalisée pour vérifier si l'appareil est sous tension. La commande doit renvoyer un code de sortie de 0 pour indiquer que l'appareil est sous tension, tout autre code de sortie indiquera que l'appareil est hors tension.", + "device_ping": "Ping", + "device_ports_add_new": "Ajouter un nouveau port", + "device_ports_desc": "UpSnap peut aussi vérifier si certains ports sont ouverts.", + "device_ports_name": "Nom", + "device_ports_number": "Numéro", + "device_ports": "Ports", + "device_require_confirmation": "Demande de confirmation", + "device_shutdown_cmd": "Commande d'arrêt", + "device_shutdown_cron_desc": "Exactement comme configurer cron pour réveiller l'appareil, vous pouvez aussi planifier un job cron pour arrêter cet appareil.", + "device_shutdown_cron_enable": "Activer l'arrêt avec cron", + "device_shutdown_cron": "Arrêt avec cron", + "device_shutdown_desc": "Cette commande shell va s'exécuter au sein de votre conteneur (si vous utilisez Docker) ou sur votre hôte (si vous utilisez l'exécutable). Pour vérifier que cela fonctionne, vous pouvez d'abord exécuter la commande à l'intérieur du conteneur ou sur le shell de l'hôte. Les commandes courantes sont net rpc pour Windows, sshpass pour Linux ou curl en général pour faire des requêtes web.", + "device_shutdown_examples_linux": "Arrêter une machine Linux distante :", + "device_shutdown_examples_windows": "Arrêter une machine Windows distante :", + "device_shutdown_examples": "Exemples :", + "device_shutdown": "Arrêt", + "device_sol_authorization": "Autorisation", + "device_sol_desc1": "Vous pouvez mettre les ordinateurs en veille à l'aide de l'outil Sleep-On-LAN. Sleep-On-LAN (SOL) est un outil/daemon externe qui fonctionne sur les PC que vous souhaitez mettre en veille, fournissant un point de terminaison REST. Pour obtenir des instructions sur la configuration de Sleep-On-LAN, veuillez vous référer à la section Usage.", + "device_sol_desc2": "SOL est configuré pour envoyer des requêtes avec le protocole HTTP au lieu d'UDP pour activer l'autorisation et faire des requêtes plus fiables.", + "device_sol_desc3": "Par conséquent, veuillez vous assurer que vous incluez HTTP:<VOTREPORT> dans la section Listeners de la configuration SOL.", + "device_sol_enable": "Activer Sleep-On-LAN", + "device_sol_password": "Mot de passe SOL", + "device_sol_port": "Port SOL", + "device_sol_user": "Utilisateur SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manuel", + "device_tabs.1": "Analyse du réseau", + "device_wake_cmd": "Commande de réveil personnalisée", + "device_wake_cron_enable": "Activer le réveil avec cron", + "device_wake_cron": "Réveil avec cron", + "device_wake_desc": "Vous pouvez allumer cet appareil en utilisant un job cron planifié.", + "device_wake": "Réveil", + "home_add_first_device": "Ajoutez votre premier appareil", + "home_grant_permissions": "Veuillez demander à votre administrateur les permissions aux appareils existants ou créez-en de nouveaux.", + "home_no_devices": "Aucun appareil ici.", + "home_order_groups": "Groupes", + "home_order_ip": "IP", + "home_order_name": "Nom", + "home_order_tooltip": "Tri", + "home_page_title": "Accueil", + "home_search_placeholder": "Recherche de dispositifs", + "login_btn_login": "Connexion", + "login_btn_more": "Plus", + "login_email_label": "Courriel ou nom d'utilisateur :", + "login_menu_title_auth_providers": "Autres fournisseurs d'authentification", + "login_password_label": "Mot de passe :", + "login_welcome": "Bienvenue", + "navbar_edit_account": "Modifier le compte", + "navbar_logout": "Déconnexion", + "navbar_new": "Nouveau", + "navbar_theme": "Thème", + "settings_icon_desc": "Définit un favicon personnalisé. Les types de fichier compatibles sont :", + "settings_icon_title": "Icône", + "settings_invalid_cron": "Syntaxe cron invalide", + "settings_lazy_ping_desc": "Lorsque le mode ping fainéant est activé, UpSnap ne va effectuer des requêtes de ping sur les appareils que lorsqu'un utilisateur actif visite le site. Si vous désactivez cette fonction, UpSnap exécutera toujours ces requêtes.", + "settings_lazy_ping_enable": "Activer", + "settings_lazy_ping_title": "Ping fainéant", + "settings_page_title": "Paramètres", + "settings_ping_interval_desc1": "Définit l'intervalle dans lequel les appareils reçoivent une requête ping. Laissez vide pour utiliser la valeur par défaut de @every 3s.", + "settings_ping_interval_desc2": "Pour écrire une syntaxe correcte pour l'utilitaire cron, consultez Wikipédia ou référez-vous à la documentation du paquet.", + "settings_ping_interval_title": "Intervalle de ping", + "settings_upsnap_version": "Version de UpSnap", + "settings_website_title_desc": "Définit le titre du site ainsi que le texte affiché dans l'onglet du navigateur.", + "settings_website_title_title": "Titre du site", + "toasts_admin_saved": "Administrateur sauvegardé", + "toasts_device_created": "{device} créé", + "toasts_device_deleted": "{device} supprimé", + "toasts_device_updated": "{device} mis à jour", + "toasts_devices_created_multiple": "{count} appareils créés", + "toasts_group_created": "Groupe {group} créé", + "toasts_group_deleted": "Groupe {group} supprimé", + "toasts_no_permission": "Vous n'avez pas la permission de visiter {url}", + "toasts_password_changed": "Mot de passe modifié. Veuillez vous reconnecter.", + "toasts_passwords_missmatch": "Les mots de passe ne correspondent pas", + "toasts_permissions_created": "Permissions pour {username} créées", + "toasts_permissions_deleted": "Permissions pour {username} supprimées", + "toasts_permissions_updated_personal": "Vos permissions ont été mises à jour", + "toasts_permissions_updated": "Permissions pour {username} mises à jour", + "toasts_settings_saved": "Paramètres sauvegardés", + "toasts_user_created": "Utilisateur {username} créé", + "toasts_user_deleted": "Utilisateur {username} supprimé", + "toasts_user_saved": "Utilisateur sauvegardé", + "users_allow_create_devices": "Autoriser {username} à créer de nouveaux appareils et à modifier les groupes d'appareils", + "users_confirm_delete_desc": "Voulez-vous vraiment supprimer {username} ?", + "users_confirm_delete_title": "Confirmation de la suppression", + "users_create_new_device": "Créer un nouvel appareil", + "users_create_new_user": "Création d'un nouvel utilisateur", + "users_delete": "Supprimer", + "users_device_permissions": "Permissions des appareils", + "users_page_title": "Utilisateurs", + "users_password_confirm": "Confirmation du mot de passe", + "users_password": "Mot de passe", + "users_power": "Allumer", + "users_read": "Lire", + "users_required_field": "champ requis", + "users_toggle": "Inverser", + "users_update": "Mettre à jour", + "users_username": "Nom d'utilisateur", + "welcome_not_expected_back": "Ramène-moi", + "welcome_not_expected_desc": "Vous avez déjà terminé l'installation ! Il n'y a plus rien à faire.", + "welcome_not_expected_title": "Je ne vous attendais pas ici ! 🧐", + "welcome_progress_step1": "Bienvenue", + "welcome_progress_step2": "Créer un compte", + "welcome_progress_step3": "Fin", + "welcome_step1_page_title": "Bienvenue sur UpSnap 🥳", + "welcome_step1_setup_btn_next": "Suivant", + "welcome_step1_setup_desc": "Veuillez suivre les étapes suivantes pour terminer l'installation.", + "welcome_step2_btn_create": "Créer", + "welcome_step2_label_email": "Courriel :", + "welcome_step2_label_min_chars": "min. 10 caractères", + "welcome_step2_label_password_confirm": "Confirmation du mot de passe :", + "welcome_step2_label_password": "Mot de passe :", + "welcome_step2_page_title": "Création du compte administrateur", + "welcome_step3_btn_done": "C'est parti !", + "welcome_step3_page_desc": "Allez-y et ajoutez quelques appareils à votre tableau de bord.", + "welcome_step3_page_title": "Vous êtes tout bon ! 🎉" +} diff --git a/frontend/messages/id.json b/frontend/messages/id.json new file mode 100644 index 00000000..02d8f023 --- /dev/null +++ b/frontend/messages/id.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Admin", + "account_account_type_user": "Pengguna", + "account_avatar_title": "Personifikasi", + "account_change_password_body": "Setelah kata sandi diubah, Anda harus masuk kembali.", + "account_change_password_confirm": "Konfirmasi kata sandi", + "account_change_password_label": "Kata sandi lama", + "account_change_password_new": "Kata sandi baru", + "account_change_password_title": "Ubah kata sandi", + "account_language_title": "Bahasa", + "account_page_title": "Akun", + "buttons_add": "Tambah", + "buttons_cancel": "Batal", + "buttons_change": "Ubah", + "buttons_confirm": "Konfirmasi", + "buttons_delete": "Hapus", + "buttons_reset": "Atur Ulang", + "buttons_save": "Simpan", + "device_card_btn_more_edit": "Ubah", + "device_card_btn_more_reboot": "Mulai ulang", + "device_card_btn_more_sleep": "Tidur", + "device_card_btn_more": "Lainnya", + "device_card_nic_tooltip_pending": "Tertunda", + "device_card_nic_tooltip_power_no_permission": "Tidak ada izin untuk menyalakan perangkat ini", + "device_card_nic_tooltip_power": "Nyalakan", + "device_card_nic_tooltip_shutdown_no_cmd": "Tidak ada perintah mematikan yang diatur", + "device_card_nic_tooltip_shutdown_no_permission": "Tidak ada izin untuk mematikan perangkat ini", + "device_card_nic_tooltip_shutdown": "Matikan", + "device_card_password": "Kata Sandi", + "device_card_tooltip_last_status_change": "Status perubahan terakhir", + "device_card_tooltip_shutdown_cron": "Jadwal Mati", + "device_card_tooltip_wake_cron": "Jadwal Bangun", + "device_card_tooltip_wake_password": "Kata sandi bangun", + "device_general_description_placeholder": "Deskripsi perangkat ini", + "device_general_description": "Deskripsi", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Nama", + "device_general_netmask": "Netmask", + "device_general_required_field": "wajib diisi", + "device_general": "Umum", + "device_groups_desc": "Anda dapat menambahkan perangkat ke dalam grup agar ditampilkan secara terorganisir di dasbor.", + "device_groups_placeholder": "Contoh: 'Ruang Bawah Tanah' atau 'Kantor'", + "device_groups": "Grup", + "device_link_desc": "Membuat nama perangkat Anda menjadi tautan yang dapat diklik, contohnya untuk menghubungkan ke dasbor.", + "device_link_open_new_tab": "Tab baru", + "device_link_open_no": "Tidak", + "device_link_open_same_tab": "Tab yang sama", + "device_link_open": "Buka tautan secara otomatis", + "device_link": "Tautan", + "device_modal_confirm_shutdown_desc": "Harap konfirmasi untuk mematikan {device}.", + "device_modal_confirm_shutdown_title": "Matikan {device}?", + "device_modal_confirm_wake_desc": "Harap konfirmasi untuk membangunkan {device}.", + "device_modal_confirm_wake_title": "Bangunkan {device}?", + "device_network_scan_add_all": "Tambahkan semua perangkat", + "device_network_scan_desc": "Pindai jaringan Anda secara otomatis untuk menemukan perangkat. Agar ini berfungsi, Anda perlu menjalankan UpSnap sebagai root/admin dan memastikan nmap sudah terinstal serta tersedia di $PATH Anda (Untuk pengguna Docker, ini sudah diatur secara otomatis). Pemindaian mungkin memerlukan beberapa detik.", + "device_network_scan_include_unknown": "Sertakan perangkat dengan nama 'Tidak Diketahui'", + "device_network_scan_ip_range": "Rentang IP", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Vendor Mac:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Netmask:", + "device_network_scan_new_netmask": "Netmask baru", + "device_network_scan_no_range": "Tidak ada rentang pemindaian", + "device_network_scan_range_saved": "Rentang pemindaian disimpan", + "device_network_scan_replace_netmask": "Ganti netmask untuk semua perangkat?", + "device_network_scan_running": "Pemindaian sedang berjalan", + "device_network_scan_unsaved_changes": "Perubahan belum disimpan", + "device_network_scan": "Pindai", + "device_page_title": "Perangkat Baru", + "device_password_desc": "Beberapa kartu jaringan memiliki opsi untuk mengatur kata sandi untuk paket ajaib, juga disebut SecureON. Kata sandi hanya dapat memiliki panjang 0, 4, atau 6 karakter.", + "device_password": "Kata sandi", + "device_ping_cmd": "Perintah ping khusus", + "device_ping_desc": "Anda dapat menggunakan perintah shell khusus untuk melihat apakah perangkat menyala. Perintah harus mengembalikan kode keluar 0 untuk menunjukkan bahwa perangkat menyala, selain kode tadi menandakan bahwa perangkat mati.", + "device_ping": "Ping", + "device_ports_add_new": "Tambahkan port baru", + "device_ports_desc": "UpSnap juga dapat memeriksa apakah port tertentu terbuka.", + "device_ports_name": "Nama", + "device_ports_number": "Nomor", + "device_ports": "Port", + "device_require_confirmation": "Memerlukan Konfirmasi", + "device_shutdown_cmd": "Perintah mematikan", + "device_shutdown_cron_desc": "Sama seperti mengatur penjadwalan untuk menyalakan perangkat, Anda juga dapat mengatur tugas penjadwal untuk mematikan perangkat ini.", + "device_shutdown_cron_enable": "Menyalakan tugas penjadwalan", + "device_shutdown_cron": "Mematikan tugas penjadwalan", + "device_shutdown_desc": "Perintah shell command ini akan berjalan dalam kontainer (jika menggunakan Docker) atau di host Anda (jika menggunakan binary). Untuk memastikan ini berfungsi, Anda dapat menjalankan perintah di dalam kontainer atau di shell host terlebih dahulu. Perintah umum meliputi net rpc untuk Windows, sshpass untuk Linux atau curl untuk permintaan web secara umum.", + "device_shutdown_examples_linux": "Mematikan Linux jarak jauh:", + "device_shutdown_examples_windows": "Mematikan Windows jarak jauh:", + "device_shutdown_examples": "Contoh:", + "device_shutdown": "Matikan", + "device_sol_authorization": "Otorisasi", + "device_sol_desc1": "Anda dapat membuat tidur komputer menggunakan alat Sleep-On-LAN. Sleep-On-LAN (SOL) merupakan alat/daemon eksternal yang berjalan di PC yang ingin Anda tidurkan, dengan menyediakan REST endpoint. Untuk instruksi pemasangan Sleep-On-LAN, silakan merujuk ke bagian Penggunaan.", + "device_sol_desc2": "SOL dikonfigurasi untuk mengirim permintaan melalui HTTP, bukan UDP, guna memungkinkan otorisasi dan membuat permintaan lebih andal.", + "device_sol_desc3": "Oleh karena itu, pastikan Anda menyertakan HTTP:<YOURPORT> dalam bagian Listeners dari SOL configuration.", + "device_sol_enable": "Aktifkan Sleep-On-LAN", + "device_sol_password": "Kata sandi SOL", + "device_sol_port": "Port SOL", + "device_sol_user": "Pengguna SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manual", + "device_tabs.1": "Pindai Jaringan", + "device_wake_cmd": "Perintah bangunkan khusus", + "device_wake_cron_enable": "Aktifkan jadwal bangun", + "device_wake_cron": "Jadwal Bangun", + "device_wake_desc": "Anda dapat menyalakan perangkat ini menggunakan tugas penjadwalan.", + "device_wake": "Bangunkan", + "home_add_first_device": "Tambahkan perangkat pertama Anda", + "home_grant_permissions": "Mohon minta admin untuk memberikan izin ke perangkat yang sudah ada atau membuat perangkat baru.", + "home_no_devices": "Tidak ada perangkat terdeteksi.", + "home_order_groups": "Grup", + "home_order_ip": "IP", + "home_order_name": "Nama", + "home_order_tooltip": "Urutan", + "home_page_title": "Beranda", + "home_search_placeholder": "Mencari perangkat", + "login_btn_login": "Masuk", + "login_btn_more": "Lainnya", + "login_email_label": "Email atau Nama Pengguna:", + "login_menu_title_auth_providers": "Penyedia Autentikasi Lainnya", + "login_password_label": "Kata Sandi:", + "login_welcome": "Selamat Datang", + "navbar_edit_account": "Ubah akun", + "navbar_logout": "Keluar", + "navbar_new": "Baru", + "navbar_theme": "Tema", + "settings_icon_desc": "Atur favicon khusus. Jenis file yang didukung:", + "settings_icon_title": "Ikon", + "settings_invalid_cron": "Sintaks tugas penjadwalan tidak valid", + "settings_lazy_ping_desc": "Saat Ping Santai diaktifkan, UpSnap hanya akan memping perangkat jika ada pengguna yang mengakses situs web. Jika dinonaktifkan, UpSnap akan selalu memping perangkat.", + "settings_lazy_ping_enable": "Aktifkan", + "settings_lazy_ping_title": "Ping Santai", + "settings_page_title": "Pengaturan", + "settings_ping_interval_desc1": "Menetapkan interval waktu di mana perangkat akan diping. Biarkan kosong untuk menggunakan nilai default @every 3s.", + "settings_ping_interval_desc2": "Pelajari lebih lanjut tentang sintaks tugas penjadwalan yang benar di Wikipedia atau lihat dokumentasi paket.", + "settings_ping_interval_title": "Interval Ping", + "settings_upsnap_version": "Versi UpSnap", + "settings_website_title_desc": "Mengatur judul situs web dan tab di browser.", + "settings_website_title_title": "Judul Situs Web", + "toasts_admin_saved": "Admin disimpan", + "toasts_device_created": "Membuat {device}", + "toasts_device_deleted": "Menghapus {device}", + "toasts_device_updated": "Memperbarui {device}", + "toasts_devices_created_multiple": "Membuat {count} perangkat", + "toasts_group_created": "Membuat grup {group}", + "toasts_group_deleted": "Menghapus grup {group}", + "toasts_no_permission": "Anda tidak memiliki izin untuk mengakses {url}", + "toasts_password_changed": "Kata sandi diubah. Silakan masuk kembali.", + "toasts_passwords_missmatch": "Kata sandi tidak cocok", + "toasts_permissions_created": "Izin untuk {username} dibuat", + "toasts_permissions_deleted": "Izin untuk {username} dihapus", + "toasts_permissions_updated_personal": "Izin Anda telah diperbarui", + "toasts_permissions_updated": "Izin untuk {username} diperbarui", + "toasts_settings_saved": "Pengaturan disimpan", + "toasts_user_created": "Pengguna {username} dibuat", + "toasts_user_deleted": "Pengguna {username} dihapus", + "toasts_user_saved": "Pengguna disimpan", + "users_allow_create_devices": "Izinkan {username} untuk membuat perangkat baru dan mengedit grup perangkat", + "users_confirm_delete_desc": "Apakah Anda yakin ingin menghapus {username}?", + "users_confirm_delete_title": "Konfirmasi Penghapusan", + "users_create_new_device": "Buat perangkat baru", + "users_create_new_user": "Buat pengguna baru", + "users_delete": "Hapus", + "users_device_permissions": "Izin Perangkat", + "users_page_title": "Pengguna", + "users_password_confirm": "Konfirmasi Kata Sandi", + "users_password": "Kata Sandi", + "users_power": "Daya", + "users_read": "Baca", + "users_required_field": "Kolom wajib diisi", + "users_toggle": "Alihkan", + "users_update": "Perbarui", + "users_username": "Nama Pengguna", + "welcome_not_expected_back": "Kembali ke halaman utama", + "welcome_not_expected_desc": "Anda sudah menyelesaikan pengaturan! Tidak ada yang perlu dilakukan.", + "welcome_not_expected_title": "Saya tidak mengira Anda akan berada di sini! 🧐", + "welcome_progress_step1": "Selamat Datang", + "welcome_progress_step2": "Buat Akun", + "welcome_progress_step3": "Selesai", + "welcome_step1_page_title": "Selamat Datang di UpSnap 🥳", + "welcome_step1_setup_btn_next": "Lanjut", + "welcome_step1_setup_desc": "Silakan selesaikan langkah-langkah berikut untuk menyelesaikan pengaturan.", + "welcome_step2_btn_create": "Buat", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "minimal 10 karakter", + "welcome_step2_label_password_confirm": "Konfirmasi Kata Sandi:", + "welcome_step2_label_password": "Kata Sandi:", + "welcome_step2_page_title": "Buat Akun Admin", + "welcome_step3_btn_done": "Ayo mulai!", + "welcome_step3_page_desc": "Silakan tambahkan beberapa perangkat ke dasbor Anda.", + "welcome_step3_page_title": "Semua sudah siap! 🎉" +} diff --git a/frontend/messages/it.json b/frontend/messages/it.json new file mode 100644 index 00000000..c38605f5 --- /dev/null +++ b/frontend/messages/it.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Amministratore", + "account_account_type_user": "Utente", + "account_avatar_title": "Avatar", + "account_change_password_body": "Dopo aver cambiato la password, dovrai effettuare di nuovo il login.", + "account_change_password_confirm": "Conferma la password", + "account_change_password_label": "Vecchia password", + "account_change_password_new": "Nuova password", + "account_change_password_title": "Cambia password", + "account_language_title": "Lingua", + "account_page_title": "Account", + "buttons_add": "Aggiungi", + "buttons_cancel": "Annulla", + "buttons_change": "Cambia", + "buttons_confirm": "Conferma", + "buttons_delete": "Cancella", + "buttons_reset": "Resetta", + "buttons_save": "Salva", + "device_card_btn_more_edit": "Modifica", + "device_card_btn_more_reboot": "Riavvia", + "device_card_btn_more_sleep": "Dormi", + "device_card_btn_more": "...", + "device_card_nic_tooltip_pending": "In attesa", + "device_card_nic_tooltip_power_no_permission": "Non hai i permessi necessari per accendere questo dispositivo", + "device_card_nic_tooltip_power": "Accendi", + "device_card_nic_tooltip_shutdown_no_cmd": "Nessun comando di spegnimento impostato", + "device_card_nic_tooltip_shutdown_no_permission": "Non hai i permessi necessari per spegnere questo dispositivo", + "device_card_nic_tooltip_shutdown": "Spegni", + "device_card_password": "Password", + "device_card_tooltip_last_status_change": "Ultimo cambiamento di stato", + "device_card_tooltip_shutdown_cron": "Spegnimento programmato", + "device_card_tooltip_wake_cron": "Sveglia programmata", + "device_card_tooltip_wake_password": "Password sveglia", + "device_general_description_placeholder": "Descrizione del dispositivo", + "device_general_description": "Descrizione", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Nome", + "device_general_netmask": "Maschera di rete", + "device_general_required_field": "Campo obbligatorio", + "device_general": "Generale", + "device_groups_desc": "Puoi aggiungere un dispositivo ad un gruppo per averli raggruppati nel schermata principale.", + "device_groups_placeholder": "per esempio 'Cantina' o 'Ufficio'", + "device_groups": "Gruppi", + "device_link_desc": "Rende il nome del tuo dispositivo un collegamento, perfetto per collegare ad esempio un sito.", + "device_link_open_new_tab": "Nuova scheda", + "device_link_open_no": "No", + "device_link_open_same_tab": "Stessa scheda", + "device_link_open": "Aprire automaticamente il link", + "device_link": "Collegamento", + "device_modal_confirm_shutdown_desc": "Sicuro di voler spegnere {device}.", + "device_modal_confirm_shutdown_title": "Spegnere {device}?", + "device_modal_confirm_wake_desc": "Sicuro di voler accendere {device}.", + "device_modal_confirm_wake_title": "Accendere {device}?", + "device_network_scan_add_all": "Aggiungi tutti i dispositivi", + "device_network_scan_desc": "Scansiona automaticamente la tua rete per i dispositivi disponibili. Affinche' funzioni, devi eseguire UpSnap come root/admin ed avere nmap installato e disponibile nella variabile d'ambiente $PATH (per gli utenti docker, questo è gia' il caso e non devi cambiare niente). La scansione puo' richiedere alcuni secondi.", + "device_network_scan_include_unknown": "Includi i dispositivi il cui nome è 'Unknown' o 'Sconosciuto'", + "device_network_scan_ip_range": "Intervallo IP", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Fornitore Mac:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Maschera di rete:", + "device_network_scan_new_netmask": "Nuova maschera di rete", + "device_network_scan_no_range": "Nessuno intervallo di scansione", + "device_network_scan_range_saved": "Intervallo di scansione salvato", + "device_network_scan_replace_netmask": "Modificare la maschera di rete per tutti i dispositivi?", + "device_network_scan_running": "Scansione in corso", + "device_network_scan_unsaved_changes": "Modifiche non salvate", + "device_network_scan": "Scansiona", + "device_page_title": "Nuovo dispositivo", + "device_password_desc": "Alcune schede di rete hanno una opzione per settare una password per i magic packets, chiamata anche SecureON. La lunghezza della password può essere solo di 0, 4 o 6 caratteri.", + "device_password": "Password", + "device_ping_cmd": "Comando ping personalizzato", + "device_ping_desc": "Puoi usare un comando personalizzato per controllare che il dispositivo sia acceso. Il comando deve ritornare un codice uguale a 0 per confermare che il dispositivo sia acceso, mentre qualunque altro codice indica che il dispositivo è spento.", + "device_ping": "Ping", + "device_ports_add_new": "Aggiungi nuova porta", + "device_ports_desc": "UpSnap puo' anche controllare che le porte siano aperte.", + "device_ports_name": "Nome", + "device_ports_number": "Numero", + "device_ports": "Porte", + "device_require_confirmation": "Chiedi conferma", + "device_shutdown_cmd": "Comando di spegnimento", + "device_shutdown_cron_desc": "Settando i parametri esattamente come faresti con cron su linux, potrai così anche impostare un azione di spegnimento su questo dispositivo.", + "device_shutdown_cron_enable": "Abilita lo spegnimento tramite cron", + "device_shutdown_cron": "Parametri di spegnimento per cron", + "device_shutdown_desc": "Questo prompt dei comandi girerà nel tuo container (se usi docker) o direttamente sul tuo host (se usi i file di installazione). Per verificare che funzioni correttamente, puoi eseguire i comandi direttamente nel container o nel tuo sistema host. Alcuni comandi comuni sono net rpc per windows, sshpass per linux oppure curl in generale per fare richieste con HTTP.", + "device_shutdown_examples_linux": "Spegni macchina linux remota:", + "device_shutdown_examples_windows": "Spegni macchina windows remota:", + "device_shutdown_examples": "Esempi:", + "device_shutdown": "Spegni", + "device_sol_authorization": "Autorizzazione", + "device_sol_desc1": "Puoi spegnere il tuo dispositivo usando lo strumento Sleep-On-LAN. Sleep-On-LAN (SOL) è uno strumento esterno che opera sul dispositivo che vuoi spegnere, il quale rende disponibile un endpoint REST. Puoi riferirti al link Uso (in inglese) per le istruzioni.", + "device_sol_desc2": "Lo strumento SOL è configurato per mandare richieste con il protocollo HTTP invece che UDP per abilitare l'autorizzazione e rendere le richieste più affidabili.", + "device_sol_desc3": "Pertanto, assicuratevi di includere HTTP:<LA-TUA-PORTA> nella sezione Listeners della configurazione di SOL.", + "device_sol_enable": "Abilita Sleep-On-LAN", + "device_sol_password": "Password SOL", + "device_sol_port": "Porta SOL", + "device_sol_user": "Utente SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manuale", + "device_tabs.1": "Scansiona la rete", + "device_wake_cmd": "Comando di accensione personalizzato", + "device_wake_cron_enable": "Abilita sveglia programmata", + "device_wake_cron": "Sveglia programmata", + "device_wake_desc": "Puoi accendere questo dispositivo con una sveglia programmata.", + "device_wake": "Accendi", + "home_add_first_device": "Aggiungi il tuo primo dispositivo", + "home_grant_permissions": "Per favore chiedi all'amministratore di darti i permessi necessari per aggiungere un nuovo dispositivo.", + "home_no_devices": "Nessun dispositivo qui.", + "home_order_groups": "Gruppi", + "home_order_ip": "IP", + "home_order_name": "Nome", + "home_order_tooltip": "Ordine", + "home_page_title": "Home", + "home_search_placeholder": "Ricerca di dispositivi", + "login_btn_login": "Login", + "login_btn_more": "Di più...", + "login_email_label": "Email o nome utente:", + "login_menu_title_auth_providers": "Altri gestori di autenticazione", + "login_password_label": "Password:", + "login_welcome": "Benvenuti", + "navbar_edit_account": "Modifica account", + "navbar_logout": "Esci", + "navbar_new": "Nuovo", + "navbar_theme": "Tema", + "settings_icon_desc": "Imposta una icona personalizzata. I tipi di file supportati sono:", + "settings_icon_title": "Icona", + "settings_invalid_cron": "Sintassi cron non valida", + "settings_lazy_ping_desc": "Quando il ping pigro è abilitato, UpSnap effettuerà i ping verso di dispositivi solamente quando un utente effettivamente visita il sito. Se è spento, allora UpSnap continuerà con il ping sempre.", + "settings_lazy_ping_enable": "Abilita", + "settings_lazy_ping_title": "Ping pigro", + "settings_page_title": "Opzioni", + "settings_ping_interval_desc1": "Imposta l'intervallo nel quale i dispositivi vengono testati con ping. Lasciare in bianco per lasciare il valore predefinito @every 3s.", + "settings_ping_interval_desc2": "Per ulteriori dettagli circa la sintassi corretta di cron, fare riferimento a Wikipedia oppure a questa documentazione (in inglese).", + "settings_ping_interval_title": "Intervallo di ping", + "settings_upsnap_version": "Versione UpSnap", + "settings_website_title_desc": "Imposta il nome del sito.", + "settings_website_title_title": "Nome del sito", + "toasts_admin_saved": "Account amministratore salvato", + "toasts_device_created": "Creato dispositivo {device}", + "toasts_device_deleted": "{device} cancellato", + "toasts_device_updated": "{device} aggiornato", + "toasts_devices_created_multiple": "Creato/i {count} dispositivi", + "toasts_group_created": "Gruppo {group} creato", + "toasts_group_deleted": "Gruppo {group} cancellato", + "toasts_no_permission": "Non hai i permessi necessari per visitare {url}", + "toasts_password_changed": "Password cambiata. Per favore, effettuate di nuovo il login.", + "toasts_passwords_missmatch": "Le password non corrispondono", + "toasts_permissions_created": "I permessi per {username} sono stati creati", + "toasts_permissions_deleted": "I permessi per {username} sono stati cancellati", + "toasts_permissions_updated_personal": "I tuoi permessi sono stati aggiornati", + "toasts_permissions_updated": "I permessi per {username} sono stati aggiornati", + "toasts_settings_saved": "Impostazioni salvate", + "toasts_user_created": "Utente {username} creato", + "toasts_user_deleted": "Utente {username} cancellato", + "toasts_user_saved": "Account utente salvato", + "users_allow_create_devices": "Permetti a {username} di creare nuovi dispositivi e gestire i gruppi di dispositivi.", + "users_confirm_delete_desc": "Sei sicuro di voler rimuovere {username}?", + "users_confirm_delete_title": "Conferma rimozione", + "users_create_new_device": "Crea un nuovo dispositivo", + "users_create_new_user": "Crea nuovo utente", + "users_delete": "Cancella", + "users_device_permissions": "Permessi dispositivo", + "users_page_title": "Utenti", + "users_password_confirm": "Conferma la password", + "users_password": "Password", + "users_power": "Accendi", + "users_read": "Leggi", + "users_required_field": "Campo obbligatorio", + "users_toggle": "Inverti", + "users_update": "Modifica", + "users_username": "Nome utente", + "welcome_not_expected_back": "Indietro", + "welcome_not_expected_desc": "L'installazione è già terminata! Non ci sono operazioni da svolgere qui.", + "welcome_not_expected_title": "Non mi aspettavo di vederti qui! 🧐", + "welcome_progress_step1": "Benvenuti", + "welcome_progress_step2": "Creare un account", + "welcome_progress_step3": "Fatto", + "welcome_step1_page_title": "Benvenuti ad UpSnap 🥳", + "welcome_step1_setup_btn_next": "Avanti", + "welcome_step1_setup_desc": "Per favore, completate i seguenti passaggi per terminare l'installazione.", + "welcome_step2_btn_create": "Crea", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "Min. 10 caratteri", + "welcome_step2_label_password_confirm": "Conferma la password:", + "welcome_step2_label_password": "Password:", + "welcome_step2_page_title": "Creare un account amministratore", + "welcome_step3_btn_done": "Andiamo!", + "welcome_step3_page_desc": "Prosegui adesso per aggiungere dispositivi alla tua lista.", + "welcome_step3_page_title": "Abbiamo finito! 🎉" +} diff --git a/frontend/messages/ja.json b/frontend/messages/ja.json new file mode 100644 index 00000000..e31fac7d --- /dev/null +++ b/frontend/messages/ja.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "管理者", + "account_account_type_user": "ユーザー", + "account_avatar_title": "アバター", + "account_change_password_body": "パスワードを変更すると、再度ログインする必要があります。", + "account_change_password_confirm": "パスワードの確認", + "account_change_password_label": "現在のパスワード", + "account_change_password_new": "新しいパスワード", + "account_change_password_title": "パスワード変更", + "account_language_title": "言語", + "account_page_title": "アカウント", + "buttons_add": "追加", + "buttons_cancel": "キャンセル", + "buttons_change": "変更", + "buttons_confirm": "確認", + "buttons_delete": "削除", + "buttons_reset": "リセット", + "buttons_save": "保存", + "device_card_btn_more_edit": "編集", + "device_card_btn_more_reboot": "再起動", + "device_card_btn_more_sleep": "スリープ", + "device_card_btn_more": "詳細", + "device_card_nic_tooltip_pending": "保留中", + "device_card_nic_tooltip_power_no_permission": "このデバイスの電源をオンにする権限がありません", + "device_card_nic_tooltip_power": "電源オン", + "device_card_nic_tooltip_shutdown_no_cmd": "シャットダウンコマンドが設定されていません", + "device_card_nic_tooltip_shutdown_no_permission": "このデバイスをシャットダウンする権限がありません", + "device_card_nic_tooltip_shutdown": "シャットダウン済み", + "device_card_password": "パスワード", + "device_card_tooltip_last_status_change": "最終ステータス変更", + "device_card_tooltip_shutdown_cron": "シャットダウンスケジュール", + "device_card_tooltip_wake_cron": "起動スケジュール", + "device_card_tooltip_wake_password": "起動パスワード", + "device_general_description_placeholder": "装置の説明", + "device_general_description": "説明", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "名前", + "device_general_netmask": "ネットマスク", + "device_general_required_field": "必須項目", + "device_general": "一般", + "device_groups_desc": "デバイスをグループに追加することで、ダッシュボード上でグループごとに並べ替えることができます。", + "device_groups_placeholder": "例: '自宅' や 'オフィス' など", + "device_groups": "グループ", + "device_link_desc": "デバイス名をクリック可能なリンクにします。たとえばダッシュボードへのリンクに最適です。", + "device_link_open_new_tab": "新しいタブ", + "device_link_open_no": "いいえ", + "device_link_open_same_tab": "同じタブ", + "device_link_open": "自動的にリンクを開く", + "device_link": "リンク", + "device_modal_confirm_shutdown_desc": "{device} をシャットダウンすることを確認してください。", + "device_modal_confirm_shutdown_title": "{device} をシャットダウンしますか?", + "device_modal_confirm_wake_desc": "{device} を起動することを確認してください。", + "device_modal_confirm_wake_title": "{device} を起動しますか?", + "device_network_scan_add_all": "すべてのデバイスを追加", + "device_network_scan_desc": "ネットワーク上のデバイスを自動的にスキャンします。この機能を使用するには、UpSnap を root/admin 権限で実行し、nmap が $PATH にインストールされて利用可能である必要があります(Docker ユーザーの場合、すでに設定済みで何もする必要はありません)。スキャンには数秒かかる場合があります。", + "device_network_scan_include_unknown": "名前が「Unknown」のデバイスを含める", + "device_network_scan_ip_range": "IP 範囲", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Mac ベンダー:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "ネットマスク:", + "device_network_scan_new_netmask": "新しいネットマスク", + "device_network_scan_no_range": "スキャン範囲なし", + "device_network_scan_range_saved": "スキャン範囲が保存されました", + "device_network_scan_replace_netmask": "すべてのデバイスのネットマスクを置き換えますか?", + "device_network_scan_running": "スキャン実行中", + "device_network_scan_unsaved_changes": "未保存の変更", + "device_network_scan": "スキャン", + "device_page_title": "新しいデバイス", + "device_password_desc": "一部のネットワークカードには、マジックパケット用のパスワード(SecureON とも呼ばれる)を設定するオプションがあります。パスワードは 0、4、または 6 文字のみの長さである必要があります。", + "device_password": "パスワード", + "device_ping_cmd": "カスタム Ping コマンド", + "device_ping_desc": "デバイスがオンになっているか確認するためにカスタムシェルコマンドを使用できます。このコマンドは、デバイスがオンであることを示すには終了コード 0 を返す必要があります。その他の終了コードはオフとして扱われます。", + "device_ping": "Ping", + "device_ports_add_new": "新しいポートを追加", + "device_ports_desc": "UpSnap は指定されたポートが開いているか確認することもできます。", + "device_ports_name": "名前", + "device_ports_number": "番号", + "device_ports": "ポート", + "device_require_confirmation": "確認を要求", + "device_shutdown_cmd": "シャットダウンコマンド", + "device_shutdown_cron_desc": "デバイスを起動するために cron を設定するのと同様に、このデバイスをシャットダウンするための cron ジョブをスケジュールすることもできます。", + "device_shutdown_cron_enable": "シャットダウンスケジュールを有効化", + "device_shutdown_cron": "シャットダウンスケジュール", + "device_shutdown_desc": "この シェルコマンド は、コンテナ内(Docker を使用している場合)またはホスト(バイナリを使用している場合)で実行されます。機能を確認するには、まずコマンドをコンテナ内またはホストのシェルで実行してください。一般的なコマンドには、Windows 用の net rpc、Linux 用の sshpass、またはウェブリクエストを行うための curl などがあります。", + "device_shutdown_examples_linux": "リモート Linux マシンのシャットダウン:", + "device_shutdown_examples_windows": "リモート Windows マシンのシャットダウン:", + "device_shutdown_examples": "例:", + "device_shutdown": "シャットダウン", + "device_sol_authorization": "認証", + "device_sol_desc1": "Sleep-On-LAN ツールを使用してコンピュータをスリープ状態にすることができます。Sleep-On-LAN(SOL)は、スリープ状態にしたい PC で動作する外部ツール/デーモンで、REST エンドポイントを提供します。Sleep-On-LAN のセットアップ方法については、Usage セクションを参照してください。", + "device_sol_desc2": "SOL は、認証を有効にし、要求をより信頼性の高いものにするために、UDP の代わりに HTTP を使用してリクエストを送信するように構成されています。", + "device_sol_desc3": "したがって、SOL 構成の Listeners セクションに HTTP:<YOURPORT> を含めるようにしてください。", + "device_sol_enable": "Sleep-On-LAN を有効化", + "device_sol_password": "SOL パスワード", + "device_sol_port": "SOL ポート", + "device_sol_user": "SOL ユーザー", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "手動", + "device_tabs.1": "ネットワークスキャン", + "device_wake_cmd": "カスタム起動コマンド", + "device_wake_cron_enable": "起動スケジュールを有効化", + "device_wake_cron": "起動スケジュール", + "device_wake_desc": "スケジュールされた cron ジョブを使用してこのデバイスを起動できます。", + "device_wake": "起動", + "home_add_first_device": "最初のデバイスを追加してください", + "home_grant_permissions": "既存のデバイスへの権限を付与するか、新しいデバイスを作成するために管理者に依頼してください。", + "home_no_devices": "デバイスがありません", + "home_order_groups": "グループ", + "home_order_ip": "IP", + "home_order_name": "名前", + "home_order_tooltip": "順序", + "home_page_title": "ホーム", + "home_search_placeholder": "デバイスの検索", + "login_btn_login": "ログイン", + "login_btn_more": "詳細", + "login_email_label": "メールアドレスまたはユーザー名:", + "login_menu_title_auth_providers": "他の認証プロバイダー", + "login_password_label": "パスワード:", + "login_welcome": "ようこそ", + "navbar_edit_account": "アカウント編集", + "navbar_logout": "ログアウト", + "navbar_new": "新規", + "navbar_theme": "テーマ", + "settings_icon_desc": "カスタムファビコンを設定します。サポートされているファイルタイプ:", + "settings_icon_title": "アイコン", + "settings_invalid_cron": "無効なcron構文", + "settings_lazy_ping_desc": "Lazy ping をオンにすると、UpSnap はアクティブなユーザーがウェブサイトを訪れている場合にのみデバイスを ping します。オフの場合、UpSnap は常にデバイスを ping します。", + "settings_lazy_ping_enable": "有効化", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "設定", + "settings_ping_interval_desc1": "デバイスが ping される間隔を設定します。空白の場合、デフォルト値 @every 3s が使用されます。", + "settings_ping_interval_desc2": "cron の正しい構文については、Wikipedia または パッケージドキュメント を参照してください。", + "settings_ping_interval_title": "Ping 間隔", + "settings_upsnap_version": "UpSnap バージョン", + "settings_website_title_desc": "ウェブサイトおよびブラウザタブのタイトルを設定します。", + "settings_website_title_title": "ウェブサイトタイトル", + "toasts_admin_saved": "管理者を保存しました", + "toasts_device_created": "{device} を作成しました", + "toasts_device_deleted": "{device} を削除しました", + "toasts_device_updated": "{device} を更新しました", + "toasts_devices_created_multiple": "{count} 台のデバイスを作成しました", + "toasts_group_created": "グループ {group} を作成しました", + "toasts_group_deleted": "グループ {group} を削除しました", + "toasts_no_permission": "{url} へのアクセス権がありません", + "toasts_password_changed": "パスワードが変更されました。再度ログインしてください。", + "toasts_passwords_missmatch": "パスワードが一致しません", + "toasts_permissions_created": "{username} の権限を作成しました", + "toasts_permissions_deleted": "{username} の権限を削除しました", + "toasts_permissions_updated_personal": "あなたの権限が更新されました", + "toasts_permissions_updated": "{username} の権限を更新しました", + "toasts_settings_saved": "設定を保存しました", + "toasts_user_created": "ユーザー {username} を作成しました", + "toasts_user_deleted": "ユーザー {username} を削除しました", + "toasts_user_saved": "ユーザーを保存しました", + "users_allow_create_devices": "{username} が新しいデバイスを作成し、デバイスグループを編集できるようにする", + "users_confirm_delete_desc": "{username} を削除してもよろしいですか?", + "users_confirm_delete_title": "削除の確認", + "users_create_new_device": "新しいデバイスを作成", + "users_create_new_user": "新しいユーザーを作成", + "users_delete": "削除", + "users_device_permissions": "デバイスの権限", + "users_page_title": "ユーザー", + "users_password_confirm": "パスワードの確認", + "users_password": "パスワード", + "users_power": "電源", + "users_read": "読み取り", + "users_required_field": "必須項目", + "users_toggle": "切り替え", + "users_update": "更新", + "users_username": "ユーザー名", + "welcome_not_expected_back": "戻る", + "welcome_not_expected_desc": "セットアップはすでに完了しています!やるべきことはありません。", + "welcome_not_expected_title": "ここにいるとは思いませんでした! 🧐", + "welcome_progress_step1": "ようこそ", + "welcome_progress_step2": "アカウント作成", + "welcome_progress_step3": "完了", + "welcome_step1_page_title": "UpSnap へようこそ 🥳", + "welcome_step1_setup_btn_next": "次へ", + "welcome_step1_setup_desc": "セットアップを完了するには、以下の手順を完了してください。", + "welcome_step2_btn_create": "作成", + "welcome_step2_label_email": "メールアドレス:", + "welcome_step2_label_min_chars": "最小 10 文字", + "welcome_step2_label_password_confirm": "パスワードの確認:", + "welcome_step2_label_password": "パスワード:", + "welcome_step2_page_title": "管理者アカウントを作成", + "welcome_step3_btn_done": "始めましょう!", + "welcome_step3_page_desc": "ダッシュボードにデバイスを追加してください。", + "welcome_step3_page_title": "準備完了です! 🎉" +} diff --git a/frontend/messages/nl.json b/frontend/messages/nl.json new file mode 100644 index 00000000..d1804d8b --- /dev/null +++ b/frontend/messages/nl.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Beheerder", + "account_account_type_user": "Gebruiker", + "account_avatar_title": "Avatar", + "account_change_password_body": "Na het wijzigen van het wachtwoord moet je opnieuw inloggen.", + "account_change_password_confirm": "Bevestig wachtwoord", + "account_change_password_label": "Oud wachtwoord", + "account_change_password_new": "Nieuw wachtwoord", + "account_change_password_title": "Wachtwoord wijzigen", + "account_language_title": "Taal", + "account_page_title": "Account", + "buttons_add": "Toevoegen", + "buttons_cancel": "Annuleren", + "buttons_change": "Wijzigen", + "buttons_confirm": "Bevestigen", + "buttons_delete": "Verwijderen", + "buttons_reset": "Resetten", + "buttons_save": "Opslaan", + "device_card_btn_more_edit": "Bewerken", + "device_card_btn_more_reboot": "Herstarten", + "device_card_btn_more_sleep": "Slaapstand", + "device_card_btn_more": "Meer", + "device_card_nic_tooltip_pending": "In behandeling", + "device_card_nic_tooltip_power_no_permission": "Geen toestemming om dit apparaat aan te zetten", + "device_card_nic_tooltip_power": "Aanzetten", + "device_card_nic_tooltip_shutdown_no_cmd": "Geen uitschakel-opdracht ingesteld", + "device_card_nic_tooltip_shutdown_no_permission": "Geen toestemming om dit apparaat uit te schakelen", + "device_card_nic_tooltip_shutdown": "Afsluiten", + "device_card_password": "Wachtwoord", + "device_card_tooltip_last_status_change": "Laatste statuswijziging", + "device_card_tooltip_shutdown_cron": "Afsluiten cron", + "device_card_tooltip_wake_cron": "Wek cron", + "device_card_tooltip_wake_password": "Wek wachtwoord", + "device_general_description_placeholder": "Enige beschrijving van het apparaat", + "device_general_description": "Beschrijving", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Naam", + "device_general_netmask": "Subnetmask", + "device_general_required_field": "vereist veld", + "device_general": "Algemeen", + "device_groups_desc": "Je kunt apparaten aan een groep toevoegen om ze op het dashboard per groep te sorteren.", + "device_groups_placeholder": "bijv. 'Kelder' of 'Kantoor'", + "device_groups": "Groepen", + "device_link_desc": "Maakt de apparaatsnaam een klikbare link, ideaal om bijvoorbeeld een dashboard te linken.", + "device_link_open_new_tab": "Nieuw tabblad", + "device_link_open_no": "Nee", + "device_link_open_same_tab": "Zelfde tab", + "device_link_open": "Link automatisch openen", + "device_link": "Link", + "device_modal_confirm_shutdown_desc": "Bevestig om {device} af te sluiten.", + "device_modal_confirm_shutdown_title": "Afsluiten {device}?", + "device_modal_confirm_wake_desc": "Bevestig om {device} te wekken.", + "device_modal_confirm_wake_title": "Wek {device}?", + "device_network_scan_add_all": "Alle apparaten toevoegen", + "device_network_scan_desc": "Automatisch jouw netwerk scannen op apparaten. Voor dit te laten werken, moet je UpSnap als root/admin uitvoeren en moet nmap geïnstalleerd en beschikbaar zijn in jouw $PATH (Voor docker-gebruikers is dit al het geval en hoef je niets meer te doen). Scannen kan enkele seconden duren.", + "device_network_scan_include_unknown": "Voeg apparaten toe waarvan de naam 'Onbekend' is", + "device_network_scan_ip_range": "IP-bereik", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Mac leverancier:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Subnetmasker:", + "device_network_scan_new_netmask": "Nieuw subnetmasker", + "device_network_scan_no_range": "Geen scanbereik", + "device_network_scan_range_saved": "Scanbereik opgeslagen", + "device_network_scan_replace_netmask": "Subnetmasker voor alle apparaten vervangen?", + "device_network_scan_running": "Scan loopt", + "device_network_scan_unsaved_changes": "Niet-opgeslagen wijzigingen", + "device_network_scan": "Scannen", + "device_page_title": "Nieuw apparaat", + "device_password_desc": "Sommige netwerkkaarten hebben de optie om een wachtwoord voor magic packets in te stellen, ook wel SecureON genoemd. Het wachtwoord kan alleen 0, 4 of 6 tekens lang zijn.", + "device_password": "Wachtwoord", + "device_ping_cmd": "Aangepaste ping-opdracht", + "device_ping_desc": "Je kunt een aangepaste shell-opdracht gebruiken om te zien of het apparaat aan staat. De opdracht moet een exitcode van 0 retourneren om aan te geven dat het apparaat aan is, elke andere exitcode markeert het apparaat als uitgeschakeld.", + "device_ping": "Ping", + "device_ports_add_new": "Voeg nieuwe poort toe", + "device_ports_desc": "UpSnap kan ook controleren of gegeven poorten open zijn.", + "device_ports_name": "Naam", + "device_ports_number": "Nummer", + "device_ports": "Poorten", + "device_require_confirmation": "Bevestiging vereist", + "device_shutdown_cmd": "Afsluitopdracht", + "device_shutdown_cron_desc": "Net als het instellen van een cron om het apparaat te wekken, kun je ook een cron-taak plannen om dit apparaat af te sluiten.", + "device_shutdown_cron_enable": "Afsluitcron inschakelen", + "device_shutdown_cron": "Afsluitcron", + "device_shutdown_desc": "Deze shell-opdracht wordt uitgevoerd binnen de container (als je docker gebruikt) of op jouw host (als je de binaire versie gebruikt). Om te verifiëren dat het werkt, kun je de opdracht eerst binnen de container of op jouw host-shell uitvoeren. Veelvoorkomende opdrachten zijn net rpc voor Windows, sshpass voor Linux of curl in het algemeen om webverzoeken te doen.", + "device_shutdown_examples_linux": "Afsluiten van een externe Linux-machine:", + "device_shutdown_examples_windows": "Afsluiten van een externe Windows-machine:", + "device_shutdown_examples": "Voorbeelden:", + "device_shutdown": "Afsluiten", + "device_sol_authorization": "Autorisatie", + "device_sol_desc1": "Je kunt computers in de slaapstand zetten met de Sleep-On-LAN tool. Sleep-On-LAN (SOL) is een externe tool/daemon die op de PC's werkt die je in de slaapstand wilt zetten en biedt een REST-endpoint. Voor instructies over het instellen van Sleep-On-LAN, zie de Gebruik sectie.", + "device_sol_desc2": "SOL is geconfigureerd om verzoeken over HTTP in plaats van UDP te verzenden om autorisatie mogelijk te maken en verzoeken betrouwbaarder te maken.", + "device_sol_desc3": "Zorg er daarom voor dat je HTTP:<JOUWPOORT> opneemt in de Listeners sectie van de SOL-configuratie.", + "device_sol_enable": "Sleep-On-LAN inschakelen", + "device_sol_password": "SOL Wachtwoord", + "device_sol_port": "SOL Poort", + "device_sol_user": "SOL Gebruiker", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Handmatig", + "device_tabs.1": "Netwerkscan", + "device_wake_cmd": "Aangepaste wek-opdracht", + "device_wake_cron_enable": "Wek cron inschakelen", + "device_wake_cron": "Wek cron", + "device_wake_desc": "Je kunt dit apparaat inschakelen met een geplande cron-taak.", + "device_wake": "Wek", + "home_add_first_device": "Voeg je eerste apparaat toe", + "home_grant_permissions": "Vraag de admin om je toestemming te geven voor bestaande apparaten of om nieuwe te creëren.", + "home_no_devices": "Geen apparaten gevonden.", + "home_order_groups": "Groepen", + "home_order_ip": "IP", + "home_order_name": "Naam", + "home_order_tooltip": "Sorteren", + "home_page_title": "Home", + "home_search_placeholder": "Apparaten zoeken", + "login_btn_login": "Inloggen", + "login_btn_more": "Meer", + "login_email_label": "E-mail of gebruikersnaam:", + "login_menu_title_auth_providers": "Andere auth-providers", + "login_password_label": "Wachtwoord:", + "login_welcome": "Welkom", + "navbar_edit_account": "Account bewerken", + "navbar_logout": "Uitloggen", + "navbar_new": "Nieuw", + "navbar_theme": "Thema", + "settings_icon_desc": "Stel een aangepast favicon in. Ondersteunde bestandstypen zijn:", + "settings_icon_title": "Icoon", + "settings_invalid_cron": "Ongeldige cron syntaxis", + "settings_lazy_ping_desc": "Wanneer lazy ping is ingeschakeld, pingt UpSnap alleen apparaten als er een actieve gebruiker de website bezoekt. Als het is uitgeschakeld, pingt UpSnap altijd apparaten.", + "settings_lazy_ping_enable": "Inschakelen", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "Instellingen", + "settings_ping_interval_desc1": "Stelt de interval in waarin de apparaten worden gepingt. Laat leeg om de standaardwaarde van @every 3s te gebruiken.", + "settings_ping_interval_desc2": "Leer meer over de juiste syntax voor cron op Wikipedia of raadpleeg de pakketdocumentatie.", + "settings_ping_interval_title": "Ping-interval", + "settings_upsnap_version": "UpSnap versie", + "settings_website_title_desc": "Stelt de titel van de website en in het browsertabblad in.", + "settings_website_title_title": "Website titel", + "toasts_admin_saved": "Beheerder opgeslagen", + "toasts_device_created": "Aangemaakt {device}", + "toasts_device_deleted": "Verwijderd {device}", + "toasts_device_updated": "Bijgewerkt {device}", + "toasts_devices_created_multiple": "Aangemaakt {count} apparaten", + "toasts_group_created": "Groep {group} aangemaakt", + "toasts_group_deleted": "Groep {group} verwijderd", + "toasts_no_permission": "Je hebt geen toestemming om {url} te bezoeken", + "toasts_password_changed": "Wachtwoord gewijzigd. Log alsjeblieft opnieuw in.", + "toasts_passwords_missmatch": "Wachtwoorden komen niet overeen", + "toasts_permissions_created": "Rechten voor {username} aangemaakt", + "toasts_permissions_deleted": "Rechten voor {username} verwijderd", + "toasts_permissions_updated_personal": "Jouw rechten zijn bijgewerkt", + "toasts_permissions_updated": "Rechten voor {username} bijgewerkt", + "toasts_settings_saved": "Instellingen opgeslagen", + "toasts_user_created": "Gebruiker {username} aangemaakt", + "toasts_user_deleted": "Gebruiker {username} verwijderd", + "toasts_user_saved": "Gebruiker opgeslagen", + "users_allow_create_devices": "Sta {username} toe om nieuwe apparaten te maken en apparaatgroepen te bewerken", + "users_confirm_delete_desc": "Weet je zeker dat je {username} wilt verwijderen?", + "users_confirm_delete_title": "Bevestig verwijderen", + "users_create_new_device": "Nieuw apparaat maken", + "users_create_new_user": "Nieuwe gebruiker aanmaken", + "users_delete": "Verwijderen", + "users_device_permissions": "Apparaattoestemmingen", + "users_page_title": "Gebruikers", + "users_password_confirm": "Bevestig wachtwoord", + "users_password": "Wachtwoord", + "users_power": "Aanzetten", + "users_read": "Lezen", + "users_required_field": "vereist veld", + "users_toggle": "Wisselen", + "users_update": "Bijwerken", + "users_username": "Gebruikersnaam", + "welcome_not_expected_back": "Breng me terug", + "welcome_not_expected_desc": "Je bent al klaar met de installatie! Er is niets meer te doen.", + "welcome_not_expected_title": "Ik zag je hier niet aankomen! 🧐", + "welcome_progress_step1": "Welkom", + "welcome_progress_step2": "Account aanmaken", + "welcome_progress_step3": "Klaar", + "welcome_step1_page_title": "Welkom bij UpSnap 🥳", + "welcome_step1_setup_btn_next": "Volgende", + "welcome_step1_setup_desc": "Voltooi de volgende stappen om de installatie te voltooien.", + "welcome_step2_btn_create": "Aanmaken", + "welcome_step2_label_email": "E-mail:", + "welcome_step2_label_min_chars": "min. 10 tekens", + "welcome_step2_label_password_confirm": "Bevestig wachtwoord:", + "welcome_step2_label_password": "Wachtwoord:", + "welcome_step2_page_title": "Maak een beheerdersaccount aan", + "welcome_step3_btn_done": "Laten we beginnen!", + "welcome_step3_page_desc": "Ga je gang en voeg enkele apparaten toe aan je dashboard.", + "welcome_step3_page_title": "Je bent helemaal klaar! 🎉" +} diff --git a/frontend/messages/pl.json b/frontend/messages/pl.json new file mode 100644 index 00000000..29cb2e80 --- /dev/null +++ b/frontend/messages/pl.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Administrator", + "account_account_type_user": "Użytkownik", + "account_avatar_title": "Awatar", + "account_change_password_body": "Po zmianie hasła, będzie konieczne ponowne zalogowanie.", + "account_change_password_confirm": "Potwierdź hasło", + "account_change_password_label": "Stare hasło", + "account_change_password_new": "Nowe hasło", + "account_change_password_title": "Zmiana hasła", + "account_language_title": "Język", + "account_page_title": "Konto", + "buttons_add": "Nowy", + "buttons_cancel": "Anuluj", + "buttons_change": "Zmień", + "buttons_confirm": "Potwierdź", + "buttons_delete": "Usuń", + "buttons_reset": "Resetuj", + "buttons_save": "Zapisz", + "device_card_btn_more_edit": "Edytuj", + "device_card_btn_more_reboot": "Zrestartuj", + "device_card_btn_more_sleep": "Wyłącz", + "device_card_btn_more": "Więcej", + "device_card_nic_tooltip_pending": "Oczekiwanie", + "device_card_nic_tooltip_power_no_permission": "Brak uprawnień do włączania tego urządzenia", + "device_card_nic_tooltip_power": "Włącz", + "device_card_nic_tooltip_shutdown_no_cmd": "Brak ustawionej polecenia do wyłączania", + "device_card_nic_tooltip_shutdown_no_permission": "Brak uprawnień do wyłączania tego urządzenia", + "device_card_nic_tooltip_shutdown": "Wyłącz", + "device_card_password": "Hasło", + "device_card_tooltip_last_status_change": "Ostatnia zmiana statusu", + "device_card_tooltip_shutdown_cron": "Cron do wyłączania", + "device_card_tooltip_wake_cron": "Cron do włączania", + "device_card_tooltip_wake_password": "Hasło do włączania", + "device_general_description_placeholder": "Przykładowy opis urządzenia", + "device_general_description": "Opis", + "device_general_ip": "IP", + "device_general_mac": "MAC", + "device_general_name": "Nazwa", + "device_general_netmask": "Maska sieci", + "device_general_required_field": "pole wymagane", + "device_general": "Ogólne", + "device_groups_desc": "Możesz dodać urządzenie do grup, aby sortować je według grup na pulpicie", + "device_groups_placeholder": "np. 'Piwnica' lub 'Biuro'", + "device_groups": "Grupy", + "device_link_desc": "Twoje urządzenie może być klikalnym łączem. Świetne do linkowania np. pulpitów.", + "device_link_open_new_tab": "W nowej karcie", + "device_link_open_no": "Nie", + "device_link_open_same_tab": "W tej samej karcie", + "device_link_open": "Otwórz link automatycznie", + "device_link": "Link", + "device_modal_confirm_shutdown_desc": "Potwierdź wyłączenie {device}.", + "device_modal_confirm_shutdown_title": "Wyłączyć {device}?", + "device_modal_confirm_wake_desc": "Potwierdź włączenie {device}.", + "device_modal_confirm_wake_title": "Włączyć {device}?", + "device_network_scan_add_all": "Dodaj wszystkie urządzenia", + "device_network_scan_desc": "Automatycznie skanuj sieć w poszukiwaniu urządzeń. Aby to zadziałało, musisz uruchomić UpSnap jako root/admin i mieć nmap zainstalowany oraz dostępny w $PATH (preinstalowany w obrazach dockerowych). Skanowanie może chwilę potrwać.", + "device_network_scan_include_unknown": "Uwzględnij urządzenia, których nazwa to \"Unknown\"", + "device_network_scan_ip_range": "Zakres IP", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Dostawca MAC:", + "device_network_scan_mac": "MAC:", + "device_network_scan_netmask": "Maska sieci:", + "device_network_scan_new_netmask": "Nowa maska sieci", + "device_network_scan_no_range": "Brak zakresu skanowania", + "device_network_scan_range_saved": "Zapisano zakres skanowania", + "device_network_scan_replace_netmask": "Zastąpić maskę sieci dla wszystkich urządzeń?", + "device_network_scan_running": "Skanowanie w toku", + "device_network_scan_unsaved_changes": "Niezapisane zmiany", + "device_network_scan": "Skanuj", + "device_page_title": "Nowe urządzenie", + "device_password_desc": "Niektóre karty sieciowe mają możliwość ustawienia hasła dla magicznych pakietów, znanych również jako SecureON. Hasło może mieć 0, 4 lub 6 znaków długości.", + "device_password": "Hasło", + "device_ping_cmd": "Niestandardowe polecenie ping", + "device_ping_desc": "Możesz wykorzystać niestandardowe polecenie powłoki, aby sprawdzić, czy urządzenie jest włączone. Polecenie powinno zwrócić kod zakończenia 0 aby wskazać, że urządzenie jest włączone. Dowolny inny kod zakończenia poskutkuje oznaczeniem urządzenia jako wyłączone.", + "device_ping": "Ping", + "device_ports_add_new": "Dodaj nowy port", + "device_ports_desc": "UpSnap może sprawdzić czy podane porty są otwarte.", + "device_ports_name": "Nazwa", + "device_ports_number": "Numer", + "device_ports": "Porty", + "device_require_confirmation": "Wymagaj potwierdzenia", + "device_shutdown_cmd": "Polecenie do wyłączania", + "device_shutdown_cron_desc": "Podobnie jak możesz harmonogramować zadanie cron do włączania urządzenia, możesz robić to również do jego wyłączania.", + "device_shutdown_cron_enable": "Włącz cron do wyłączania", + "device_shutdown_cron": "Cron do wyłączania", + "device_shutdown_desc": "To polecenie powłoki zostanie wywołane w Twoim kontenerze (jeżeli używasz Dockera) lub na Twoim hoście (jeżeli używasz pliku binarnego). Aby zweryfikować jego działanie, możesz je najpierw uruchomić wewnątrz kontenera lub na hoście. Powszechne polecenia to net rpc dla Windowsa, sshpass dla Linuxa lub curl do wykonywania żądań internetowych.", + "device_shutdown_examples_linux": "Wyłącz zdalną maszynę Linux:", + "device_shutdown_examples_windows": "Wyłącz zdalną maszynę Windows:", + "device_shutdown_examples": "Przykłady:", + "device_shutdown": "Wyłącz", + "device_sol_authorization": "Autoryzacja", + "device_sol_desc1": "Możesz wyłączać urządzenia za pomocą narzędzia Sleep-On-LAN. Sleep-On-LAN (SOL) jest zewnętrznym narzędziem/demonem, działającym na urządzeniach które chcesz wyłączać. Tworzy on endpoint REST. Aby dowiedzieć się jak skonfigurować SOL, zapoznaj się z instrukcją użytkownika.", + "device_sol_desc2": "SOL przyjmuje żądania za pomocą HTTP zamiast UDP, aby zwiększyć niezawodność i umożliwić autoryzację.", + "device_sol_desc3": "W związku z tym, uwzględnij HTTP:<TWÓJPORT> w sekcji Listeners twojej konfiguracji SOL.", + "device_sol_enable": "Włącz Sleep-On-LAN", + "device_sol_password": "Hasło SOL", + "device_sol_port": "Port SOL", + "device_sol_user": "Użytkownik SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Ręcznie", + "device_tabs.1": "Skanuj sieć", + "device_wake_cmd": "Niestandardowe polecenie do włączania", + "device_wake_cron_enable": "Włącz cron do włączania", + "device_wake_cron": "Cron do włączania", + "device_wake_desc": "Możesz włączyć to urządzenie za pomocą zaplanowanego zadania cron.", + "device_wake": "Włączanie", + "home_add_first_device": "Utwórz pierwsze urządzenie", + "home_grant_permissions": "Poproś administratora o przyznanie uprawnień do istniejących urządzeń lub do tworzenia nowych.", + "home_no_devices": "Brak urządzeń.", + "home_order_groups": "Grupowanie", + "home_order_ip": "IP", + "home_order_name": "Nazwa", + "home_order_tooltip": "Kolejność", + "home_page_title": "Strona Główna", + "home_search_placeholder": "Wyszukiwanie urządzeń", + "login_btn_login": "Zaloguj", + "login_btn_more": "Więcej", + "login_email_label": "Email lub nazwa użytkownika:", + "login_menu_title_auth_providers": "Inni dostawcy autoryzacji", + "login_password_label": "Hasło:", + "login_welcome": "Witaj", + "navbar_edit_account": "Edytuj konto", + "navbar_logout": "Wyloguj", + "navbar_new": "Utwórz", + "navbar_theme": "Motyw", + "settings_icon_desc": "Ustaw niestandardowy favicon. Obsługiwane są typy plików:", + "settings_icon_title": "Ikona", + "settings_invalid_cron": "Nieprawidłowa składnia cron", + "settings_lazy_ping_desc": "Gdy leniwe pingowanie jest włączone, UpSnap będzie pingować urządzenia tylko wtedy, gdy użytkownicy odwiedzają stronę. Gdy ta opcja jest wyłączona, UpSnap będzie pingować urządzenia nieustannie.", + "settings_lazy_ping_enable": "Włącz", + "settings_lazy_ping_title": "Leniwe pingowanie", + "settings_page_title": "Ustawienia", + "settings_ping_interval_desc1": "Ustawia interwał, w którym urządzenia są pingowane. Pozostaw puste aby użyć domyślnej wartości @every 3s.", + "settings_ping_interval_desc2": "Dowiedz się więcej na temat składni cron na Wikipedii lub w dokumentacji pakietu cron.", + "settings_ping_interval_title": "Interwał pingowania", + "settings_upsnap_version": "Wersja UpSnap", + "settings_website_title_desc": "Ustawia tytuł strony internetowej i na karcie przeglądarki.", + "settings_website_title_title": "Tytuł strony", + "toasts_admin_saved": "Administrator zapisany", + "toasts_device_created": "Utworzono {device}", + "toasts_device_deleted": "Usunięto {device}", + "toasts_device_updated": "Zaktualizowano {device}", + "toasts_devices_created_multiple": "Utworzono {count} urządzeń", + "toasts_group_created": "Utworzono grupę {group}", + "toasts_group_deleted": "Usunięto grupę {group}", + "toasts_no_permission": "Nie masz uprawnień aby odwiedzić {url}", + "toasts_password_changed": "Hasło zostało zmienione. Zaloguj się ponownie.", + "toasts_passwords_missmatch": "Hasła się różnią", + "toasts_permissions_created": "Uprawnienia dla {username} zostały utworzone", + "toasts_permissions_deleted": "Uprawnienia dla {username} zostały usunięte", + "toasts_permissions_updated_personal": "Twoje uprawnienia zostały zaktualizowane", + "toasts_permissions_updated": "Uprawnienia dla {username} zostały zaktualizowane", + "toasts_settings_saved": "Zapisano ustawienia", + "toasts_user_created": "Użytkownik {username} utworzony", + "toasts_user_deleted": "Użytkownik {username} usunięty", + "toasts_user_saved": "Użytkownik zapisany", + "users_allow_create_devices": "Pozwól {username} tworzyć nowe urządzenia i edytować grupy urządzeń", + "users_confirm_delete_desc": "Czy na pewno chcesz usunąć {username}?", + "users_confirm_delete_title": "Potwierdź usunięcie", + "users_create_new_device": "Utwórz nowe urządzenie", + "users_create_new_user": "Utwórz użytkownika", + "users_delete": "Usuwanie", + "users_device_permissions": "Uprawnienia do urządzeń", + "users_page_title": "Użytkownicy", + "users_password_confirm": "Potwierdź hasło", + "users_password": "Hasło", + "users_power": "Włączanie", + "users_read": "Odczyt", + "users_required_field": "pole wymagane", + "users_toggle": "Przełącz", + "users_update": "Aktualizacja", + "users_username": "Nazwa użytkownika", + "welcome_not_expected_back": "Powrót", + "welcome_not_expected_desc": "Konfiguracja zakończona! Nie musisz nic więcej robić.", + "welcome_not_expected_title": "Stało się coś niespodziewanego! 🧐", + "welcome_progress_step1": "Witaj", + "welcome_progress_step2": "Utwórz konto", + "welcome_progress_step3": "Gotowe", + "welcome_step1_page_title": "Witaj w UpSnap 🥳", + "welcome_step1_setup_btn_next": "Dalej", + "welcome_step1_setup_desc": "Wykonaj następujące kroki, aby dokończyć konfigurację.", + "welcome_step2_btn_create": "Utwórz", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "min. 10 znaków", + "welcome_step2_label_password_confirm": "Potwierdź hasło:", + "welcome_step2_label_password": "Hasło:", + "welcome_step2_page_title": "Utwórz konto administratora", + "welcome_step3_btn_done": "Lecimy!", + "welcome_step3_page_desc": "A teraz dodaj kilka urządzeń do Twojego pulpitu.", + "welcome_step3_page_title": "Wszystko gotowe! 🎉" +} diff --git a/frontend/messages/pt.json b/frontend/messages/pt.json new file mode 100644 index 00000000..a963cb16 --- /dev/null +++ b/frontend/messages/pt.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "Admin", + "account_account_type_user": "Utilizador", + "account_avatar_title": "Avatar", + "account_change_password_body": "Terá de voltar a entrar após alterar a sua password.", + "account_change_password_confirm": "Confirmar password", + "account_change_password_label": "Antiga password", + "account_change_password_new": "Nova password", + "account_change_password_title": "Alterar password", + "account_language_title": "Idioma", + "account_page_title": "Conta", + "buttons_add": "Adicionar", + "buttons_cancel": "Cancelar", + "buttons_change": "Alterar", + "buttons_confirm": "Confirmar", + "buttons_delete": "Apagar", + "buttons_reset": "Repor", + "buttons_save": "Guardar", + "device_card_btn_more_edit": "Editar", + "device_card_btn_more_reboot": "Reiniciar", + "device_card_btn_more_sleep": "Suspender", + "device_card_btn_more": "Mais", + "device_card_nic_tooltip_pending": "Pendente", + "device_card_nic_tooltip_power_no_permission": "Não tem permissão para ligar este dispositivo", + "device_card_nic_tooltip_power": "Ligar", + "device_card_nic_tooltip_shutdown_no_cmd": "Comando para desligar não está definido", + "device_card_nic_tooltip_shutdown_no_permission": "Não tem permissão para desligar este dispositivo", + "device_card_nic_tooltip_shutdown": "Desligar", + "device_card_password": "Password", + "device_card_tooltip_last_status_change": "Última alteração de estado", + "device_card_tooltip_shutdown_cron": "Shutdown cron", + "device_card_tooltip_wake_cron": "Wake cron", + "device_card_tooltip_wake_password": "Wake password", + "device_general_description_placeholder": "Alguma descrição do dispositivo", + "device_general_description": "Descrição", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "Nome", + "device_general_netmask": "Máscara de rede", + "device_general_required_field": "campo obrigatório", + "device_general": "Geral", + "device_groups_desc": "Pode adicionar dispositivos a grupos para ordenar na dashboard.", + "device_groups_placeholder": "e.g. 'Cave' ou 'Escritório'", + "device_groups": "Grupos", + "device_link_desc": "Permite que o nome do seu dispositivo seja um link. Perfeito para dashboard, por exemplo.", + "device_link_open_new_tab": "Novo separador", + "device_link_open_no": "Não", + "device_link_open_same_tab": "O mesmo separador", + "device_link_open": "Abrir automaticamente a ligação", + "device_link": "Link", + "device_modal_confirm_shutdown_desc": "Confirme o encerramento do {device}.", + "device_modal_confirm_shutdown_title": "Desligar {device}?", + "device_modal_confirm_wake_desc": "Confirme para ativar {device}.", + "device_modal_confirm_wake_title": "Despertar {device}?", + "device_network_scan_add_all": "Adicionar todos os dispositivos", + "device_network_scan_desc": "Procurar automaticamente na sua rede por dispositivos. Terá de executar o UpSnap como root/admin e ter o nmap instalado e disponível no seu $PATH (No caso de usar docker, não tem de fazer nada). Poderá demorar alguns segundos.", + "device_network_scan_include_unknown": "Incluir dispositivos em que o nome é \"Unknown\"", + "device_network_scan_ip_range": "Intervalo IP", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Fornecedor Mac:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "Máscara de rede:", + "device_network_scan_new_netmask": "Nova máscara de rede", + "device_network_scan_no_range": "Sem intervalo de IP", + "device_network_scan_range_saved": "Intervalo de pesquisa guardado", + "device_network_scan_replace_netmask": "Substituir máscara de rede para todos os dispositivos?", + "device_network_scan_running": "Pesquisa em curso", + "device_network_scan_unsaved_changes": "Alterações por guardar", + "device_network_scan": "Pesquisar", + "device_page_title": "Novo dispositivo", + "device_password_desc": "Alguns adaptadores de rede têm a opção de definir uma password para magic packets, também conhecido como SecureON. A password só poderá conter 0, 4 ou 6 caracteres.", + "device_password": "Password", + "device_ping_cmd": "Comando ping personalizado", + "device_ping_desc": "Pode utilizar um comando shell personalizado para ver se o dispositivo está ligado. O comando deve devolver um código de saída de 0 para indicar que o dispositivo está ligado, qualquer outro código de saída marcará o dispositivo como desligado.", + "device_ping": "Ping", + "device_ports_add_new": "Adicionar novo porto", + "device_ports_desc": "UpSnap pode verificar se certos portos estão abertos.", + "device_ports_name": "Nome", + "device_ports_number": "Número", + "device_ports": "Portos", + "device_require_confirmation": "Exigir confirmação", + "device_shutdown_cmd": "Comando para desligar", + "device_shutdown_cron_desc": "Assim como pode ter um cron job para ligar o seu dispositivo, pode também usar para desligar.", + "device_shutdown_cron_enable": "Ativar shutdown cron", + "device_shutdown_cron": "Shutdown cron", + "device_shutdown_desc": "Este comando shell irá correr dentro do teu container (no caso de usar docker) ou no seu host (na versão standalone). Para verificar que funciona, pode executar o comando primeiro no seu container/host. Comandos comuns são net rpc para windows, sshpass para linux ou curl em geral para enviar pedidos web.", + "device_shutdown_examples_linux": "Desligar dispositivo linux remoto:", + "device_shutdown_examples_windows": "Desligar dispositivo windows remoto:", + "device_shutdown_examples": "Exemplos:", + "device_shutdown": "Desligar", + "device_sol_authorization": "Autenticação", + "device_sol_desc1": "Poderá suspender o seu dispositivo usando a ferramenta Sleep-On-LAN. Sleep-On-LAN (SOL) é uma ferramenta externa que terá de ser executada no dispositivo que quer suspender, facilitando um REST endpoint. Para instruções em como configurar Sleep-On-LAN, veja a secção Usage.", + "device_sol_desc2": "SOL envia pedidos através de HTTP em vez de UDP para permitir autenticação e tornar os pedidos mais seguros.", + "device_sol_desc3": "Portanto, tenha a certeza que inclui HTTP:<SEU_PORTO> na secção Listeners de configuração SOL.", + "device_sol_enable": "Ativar Sleep-On-LAN", + "device_sol_password": "Password SOL", + "device_sol_port": "Porto SOL", + "device_sol_user": "Utilizador SOL", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "Manual", + "device_tabs.1": "Pesquisa de rede", + "device_wake_cmd": "Comando de despertar personalizado", + "device_wake_cron_enable": "Ativar wake cron", + "device_wake_cron": "Wake cron", + "device_wake_desc": "Poderá ligar este dispositivo através dum cron job agendado.", + "device_wake": "Ligar", + "home_add_first_device": "Adicione o seu primeiro dispositivo", + "home_grant_permissions": "Peça ao administrador para alterar as suas permissões para dispositivos existentes ou para criar novos.", + "home_no_devices": "Sem dispositivos.", + "home_order_groups": "Grupos", + "home_order_ip": "IP", + "home_order_name": "Nome", + "home_order_tooltip": "Ordem", + "home_page_title": "Início", + "home_search_placeholder": "Procurar dispositivos", + "login_btn_login": "Entrar", + "login_btn_more": "Mais", + "login_email_label": "Email ou Utilizador:", + "login_menu_title_auth_providers": "Outros provedores de autenticação", + "login_password_label": "Password:", + "login_welcome": "Bem-vindo", + "navbar_edit_account": "Editar conta", + "navbar_logout": "Sair", + "navbar_new": "Novo", + "navbar_theme": "Tema", + "settings_icon_desc": "Define um favicon personalizado. Tipos de ficheiros suportados são:", + "settings_icon_title": "Ícone", + "settings_invalid_cron": "Sintaxe inválida do cron", + "settings_lazy_ping_desc": "Quando o lazy ping está activo, o UpSnap irá apenas executar o ping se existir um utilizador ativo no website. Se desligado, o UpSnap irá executar sempre o ping.", + "settings_lazy_ping_enable": "Activar", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "Definições", + "settings_ping_interval_desc1": "Define o intervalo em que o ping é executado. Deixe em branco para usar o valor por defeito de @every 3s.", + "settings_ping_interval_desc2": "Poderá ver a sintaxe correta para cron em Wikipedia ou em documentação cron.", + "settings_ping_interval_title": "Intervalo ping", + "settings_upsnap_version": "Versão UpSnap", + "settings_website_title_desc": "Define o título do website.", + "settings_website_title_title": "Título do website", + "toasts_admin_saved": "Administrador atualizado", + "toasts_device_created": "Adicionado dispositivo {device}", + "toasts_device_deleted": "{device} apagado", + "toasts_device_updated": "{device} atualizado", + "toasts_devices_created_multiple": "Adicionados {count} dispositivos", + "toasts_group_created": "Grupo {group} criado", + "toasts_group_deleted": "Grupo {group} apagado", + "toasts_no_permission": "Não tem permissão para visitar {url}", + "toasts_password_changed": "Password alterada. Terá de entrar novamente.", + "toasts_passwords_missmatch": "As passwords não correspondem", + "toasts_permissions_created": "Permissões criadas para {username}", + "toasts_permissions_deleted": "Permissões apagadas para {username}", + "toasts_permissions_updated_personal": "As suas permissões foram atualizadas", + "toasts_permissions_updated": "Permissões atualizadas para {username}", + "toasts_settings_saved": "Definições guardadas", + "toasts_user_created": "Utilizador {username} criado", + "toasts_user_deleted": "Utilizador {username} apagado", + "toasts_user_saved": "Utilizador atualizado", + "users_allow_create_devices": "Permitir a {username} adicionar novos dispositivos e editar grupos de dispositivos", + "users_confirm_delete_desc": "Tem a certeza que quer apagar {username}?", + "users_confirm_delete_title": "Confirmar", + "users_create_new_device": "Adicionar dispositivo", + "users_create_new_user": "Criar novo utilizador", + "users_delete": "Apagar", + "users_device_permissions": "Permissões de dispositivos", + "users_page_title": "Utilizadores", + "users_password_confirm": "Confirmar password", + "users_password": "Password", + "users_power": "Ligar/desligar", + "users_read": "Ver", + "users_required_field": "campo obrigatório", + "users_toggle": "Alternar", + "users_update": "Editar", + "users_username": "Utilizador", + "welcome_not_expected_back": "Voltar", + "welcome_not_expected_desc": "A configuração está concluída. Nada a fazer aqui.", + "welcome_not_expected_title": "Não esperava ver aqui alguém! 🧐", + "welcome_progress_step1": "Bem-vindo", + "welcome_progress_step2": "Criar conta", + "welcome_progress_step3": "Concluído", + "welcome_step1_page_title": "Bem-vindo ao UpSnap 🥳", + "welcome_step1_setup_btn_next": "Seguinte", + "welcome_step1_setup_desc": "Complete os próximos passos para terminar a configuração.", + "welcome_step2_btn_create": "Criar", + "welcome_step2_label_email": "Email:", + "welcome_step2_label_min_chars": "min. 10 caracteres", + "welcome_step2_label_password_confirm": "Confirmar password:", + "welcome_step2_label_password": "Password:", + "welcome_step2_page_title": "Criar conta de administrador", + "welcome_step3_btn_done": "Vamos!", + "welcome_step3_page_desc": "Adicione alguns dispositivos à sua dashboard.", + "welcome_step3_page_title": "Concluído! 🎉" +} diff --git a/frontend/messages/zh-TW.json b/frontend/messages/zh-TW.json new file mode 100644 index 00000000..e8733786 --- /dev/null +++ b/frontend/messages/zh-TW.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "管理員", + "account_account_type_user": "普通使用者", + "account_avatar_title": "頭像", + "account_change_password_body": "更改密碼後,將需重新登入", + "account_change_password_confirm": "確認密碼", + "account_change_password_label": "舊密碼", + "account_change_password_new": "新密碼", + "account_change_password_title": "更改密碼", + "account_language_title": "語言", + "account_page_title": "帳號資訊", + "buttons_add": "新增", + "buttons_cancel": "取消", + "buttons_change": "更改", + "buttons_confirm": "確認", + "buttons_delete": "刪除", + "buttons_reset": "重設", + "buttons_save": "保存", + "device_card_btn_more_edit": "編輯", + "device_card_btn_more_reboot": "重新啟動", + "device_card_btn_more_sleep": "睡眠", + "device_card_btn_more": "更多", + "device_card_nic_tooltip_pending": "等待中...", + "device_card_nic_tooltip_power_no_permission": "無開啟此裝置之權限", + "device_card_nic_tooltip_power": "開機", + "device_card_nic_tooltip_shutdown_no_cmd": "未設定關機指令", + "device_card_nic_tooltip_shutdown_no_permission": "無關閉此裝置之權限", + "device_card_nic_tooltip_shutdown": "關機", + "device_card_password": "密碼", + "device_card_tooltip_last_status_change": "最後狀態更新", + "device_card_tooltip_shutdown_cron": "關機排程", + "device_card_tooltip_wake_cron": "喚醒排程", + "device_card_tooltip_wake_password": "喚醒密碼", + "device_general_description_placeholder": "關於這个裝置的描述", + "device_general_description": "描述", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "名稱", + "device_general_netmask": "子網域遮罩", + "device_general_required_field": "必填", + "device_general": "通用", + "device_groups_desc": "你可以將裝置加到群組, 以便在控制面板上依群組排序。", + "device_groups_placeholder": "例如: 'Basement' 或 'Office'", + "device_groups": "群組", + "device_link_desc": "讓您的裝置名稱成為可點擊的連結,非常適合用來連結儀表板等。", + "device_link_open_new_tab": "新標籤", + "device_link_open_no": "毋", + "device_link_open_same_tab": "同一個標籤", + "device_link_open": "自動開啟連結", + "device_link": "連結", + "device_modal_confirm_shutdown_desc": "你確定要關閉 {device} 嗎?", + "device_modal_confirm_shutdown_title": "關閉 {device}?", + "device_modal_confirm_wake_desc": "你確定要喚醒 {device} 嗎?", + "device_modal_confirm_wake_title": "喚醒 {device}?", + "device_network_scan_add_all": "新增全部裝置", + "device_network_scan_desc": "自動掃描網路上的設備,要使用這個功能,你需要以root/系統管理員權限執行 UpSnap, 並在你的 $PATH 中安裝nmap(使用docker安裝者不需執行任何操作),掃描可能需一段時間。", + "device_network_scan_include_unknown": "包括名稱為 “Unknown” 的裝置", + "device_network_scan_ip_range": "IP 範圍", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Mac 供應商:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "子網域遮罩:", + "device_network_scan_new_netmask": "新子網域遮罩", + "device_network_scan_no_range": "無掃瞄範圍", + "device_network_scan_range_saved": "掃瞄範圍已儲存", + "device_network_scan_replace_netmask": "替換所有設備的子網域遮罩?", + "device_network_scan_running": "掃描中", + "device_network_scan_unsaved_changes": "未儲存的更改", + "device_network_scan": "掃描", + "device_page_title": "新裝置", + "device_password_desc": "一些網路介面卡能給 magic packets 設密碼, 也可稱作 SecureON. 密碼長度只能為0、4或6個字。", + "device_password": "密碼", + "device_ping_cmd": "自定義 ping 指令", + "device_ping_desc": "你可以使用自定義的指令來檢查裝置是否開機。該指令應返回退出碼 0 以表示裝置已開機,任何其他退出碼將標記裝置為關機。", + "device_ping": "Ping", + "device_ports_add_new": "新增埠", + "device_ports_desc": "UpSnap 可以檢查指定的埠是否開啟", + "device_ports_name": "名稱", + "device_ports_number": "通訊埠編號", + "device_ports": "埠", + "device_require_confirmation": "再次確認", + "device_shutdown_cmd": "關機指令", + "device_shutdown_cron_desc": "就像設定排程來喚醒裝置一樣,您也可以設定一個排程來關閉這個裝置。", + "device_shutdown_cron_enable": "啟用關機排程", + "device_shutdown_cron": "關機排程", + "device_shutdown_desc": "這個shell指令將在您的容器內運行(如果您使用docker),或者在您的主機上運行(如果您使用二進制)。為了驗證其正常工作,您可以先在容器內或主機的shell中運行這個指令。常見的指令有net rpc用於Windows,sshpass用於Linux,或者一般用於進行網絡請求的curl。", + "device_shutdown_examples_linux": "關閉遠端 Linux 主機:", + "device_shutdown_examples_windows": "關閉遠端 Windows 主機:", + "device_shutdown_examples": "範例:", + "device_shutdown": "關機", + "device_sol_authorization": "認證", + "device_sol_desc1": "你可以使用 Sleep-On-LAN 工具讓電腦睡眠。 Sleep-On-LAN (SOL) 是一个外部的工具,它在你想要進入睡眠的PC上執行並有RestAPI端口. 有關 Sleep-On-LAN 設定的說明, 請見文檔 Usage", + "device_sol_desc2": "SOL 已配置為使用 HTTP 發送請求,而不是 UDP以啟用授權並提高請求的可靠性。", + "device_sol_desc3": "因此, 請確保在 SOL 配置 的 Listeners 部分中包含HTTP:<YOURPORT>", + "device_sol_enable": "啟用 Sleep-On-LAN", + "device_sol_password": "SOL 密碼", + "device_sol_port": "SOL 通訊埠", + "device_sol_user": "SOL 帳號", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "手動設定", + "device_tabs.1": "網路掃描", + "device_wake_cmd": "自定義唤醒指令", + "device_wake_cron_enable": "啟用定時喚醒", + "device_wake_cron": "唤醒排程", + "device_wake_desc": "你可以透過排程来唤醒裝置。", + "device_wake": "喚醒", + "home_add_first_device": "添加你的第一台設備", + "home_grant_permissions": "請聯絡系統管理員授權現有設備或創建新設備的權限", + "home_no_devices": "尚無設備", + "home_order_groups": "群組", + "home_order_ip": "IP位址", + "home_order_name": "名稱", + "home_order_tooltip": "排序", + "home_page_title": "首頁", + "home_search_placeholder": "搜尋設備", + "login_btn_login": "登入", + "login_btn_more": "更多", + "login_email_label": "電子郵件/使用者名稱:", + "login_menu_title_auth_providers": "其他身份驗證提供者", + "login_password_label": "密碼:", + "login_welcome": "歡迎使用", + "navbar_edit_account": "編輯帳號", + "navbar_logout": "退出", + "navbar_new": "新增", + "navbar_theme": "主題", + "settings_icon_desc": "設定一個自訂義圖標。支援的檔案類型:", + "settings_icon_title": "圖標", + "settings_invalid_cron": "「無效的 Cron 語法」", + "settings_lazy_ping_desc": "當開關打開時, UpSnap 只會在有訪問者訪問網站時才對設備進行 ping 測試", + "settings_lazy_ping_enable": "啟用", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "設定", + "settings_ping_interval_desc1": "設定 ping 的間隔。留空使用預設值 @every 3s.", + "settings_ping_interval_desc2": "有關 cron 的更多資訊,請見Wikipedia 或參閱 cron 文檔.", + "settings_ping_interval_title": "Ping 間隔", + "settings_upsnap_version": "UpSnap 版本", + "settings_website_title_desc": "設置網站的標題,同時顯示在瀏覽器的標籤中。", + "settings_website_title_title": "網站標題", + "toasts_admin_saved": "帳號資訊已儲存", + "toasts_device_created": "已創建 {device}", + "toasts_device_deleted": "已刪除 {device}", + "toasts_device_updated": "已更新 {device}", + "toasts_devices_created_multiple": "已創建 {count} 個設備", + "toasts_group_created": "已創建群組 {group}", + "toasts_group_deleted": "已創建群組 {group}", + "toasts_no_permission": "你無權訪問 {url}", + "toasts_password_changed": "密碼已修改,請重新登入。", + "toasts_passwords_missmatch": "兩次輸入的密碼不相同", + "toasts_permissions_created": "使用者 {username} 的權限已創建", + "toasts_permissions_deleted": "使用者 {username} 的權限已刪除", + "toasts_permissions_updated_personal": "你的權限已更新", + "toasts_permissions_updated": "使用者 {username} 的權限已更新", + "toasts_settings_saved": "設定已儲存", + "toasts_user_created": "使用者 {username} 已創建", + "toasts_user_deleted": "使用者 {username} 已刪除", + "toasts_user_saved": "帳號資訊已儲存", + "users_allow_create_devices": "允許 {username} 創建新裝置和修改群組", + "users_confirm_delete_desc": "你確定要刪除 {username} 嗎?", + "users_confirm_delete_title": "確認刪除", + "users_create_new_device": "創建新裝置", + "users_create_new_user": "新增使用者", + "users_delete": "刪除", + "users_device_permissions": "裝置權限", + "users_page_title": "使用者", + "users_password_confirm": "確認密碼", + "users_password": "密碼", + "users_power": "電源", + "users_read": "查看", + "users_required_field": "必填", + "users_toggle": "全選", + "users_update": "更新", + "users_username": "使用者名稱", + "welcome_not_expected_back": "返回", + "welcome_not_expected_desc": "你已經完成設定,無需再次設定", + "welcome_not_expected_title": "意料之外! 🧐", + "welcome_progress_step1": "歡迎", + "welcome_progress_step2": "創建帳號", + "welcome_progress_step3": "完成", + "welcome_step1_page_title": "歡迎使用 UpSnap 🥳", + "welcome_step1_setup_btn_next": "下一步", + "welcome_step1_setup_desc": "初次使用,請依下列指示完成步驟", + "welcome_step2_btn_create": "創建", + "welcome_step2_label_email": "電子郵件:", + "welcome_step2_label_min_chars": "請輸入至少10个字元", + "welcome_step2_label_password_confirm": "確認密碼:", + "welcome_step2_label_password": "密碼:", + "welcome_step2_page_title": "創建管理者帳號", + "welcome_step3_btn_done": "開始使用!", + "welcome_step3_page_desc": "繼續向您的儀表板新增裝置。", + "welcome_step3_page_title": "一切就緒! 🎉" +} diff --git a/frontend/messages/zh.json b/frontend/messages/zh.json new file mode 100644 index 00000000..d1e052b4 --- /dev/null +++ b/frontend/messages/zh.json @@ -0,0 +1,192 @@ +{ + "$schema": "https://inlang.com/schema/inlang-message-format", + "account_account_type_admin": "管理员", + "account_account_type_user": "普通用户", + "account_avatar_title": "头像", + "account_change_password_body": "更改密码后, 您需要重新登录.", + "account_change_password_confirm": "确认密码", + "account_change_password_label": "旧密码", + "account_change_password_new": "新密码", + "account_change_password_title": "更改密码", + "account_language_title": "语言", + "account_page_title": "账户信息", + "buttons_add": "添加", + "buttons_cancel": "取消", + "buttons_change": "更改", + "buttons_confirm": "确认", + "buttons_delete": "删除", + "buttons_reset": "重置", + "buttons_save": "保存", + "device_card_btn_more_edit": "编辑", + "device_card_btn_more_reboot": "重启", + "device_card_btn_more_sleep": "Sleep", + "device_card_btn_more": "更多", + "device_card_nic_tooltip_pending": "等待中...", + "device_card_nic_tooltip_power_no_permission": "没有启动此设备的权限", + "device_card_nic_tooltip_power": "启动", + "device_card_nic_tooltip_shutdown_no_cmd": "未设置关机命令", + "device_card_nic_tooltip_shutdown_no_permission": "没有关闭此设备的权限", + "device_card_nic_tooltip_shutdown": "关机", + "device_card_password": "密码", + "device_card_tooltip_last_status_change": "最近状态更新", + "device_card_tooltip_shutdown_cron": "关机计划", + "device_card_tooltip_wake_cron": "唤醒计划", + "device_card_tooltip_wake_password": "唤醒密码", + "device_general_description_placeholder": "设备的一些说明", + "device_general_description": "说明", + "device_general_ip": "IP", + "device_general_mac": "Mac", + "device_general_name": "名称", + "device_general_netmask": "子网掩码", + "device_general_required_field": "必填字段", + "device_general": "通用", + "device_groups_desc": "您可以将设备添加到组, 以便在控制面板上按组对其进行排序.", + "device_groups_placeholder": "例如: 'Basement' 或 'Office'", + "device_groups": "分组", + "device_link_desc": "为您的设备名设置一个可点击的链接.", + "device_link_open_new_tab": "新标签", + "device_link_open_no": "没有", + "device_link_open_same_tab": "同一标签", + "device_link_open": "自动打开链接", + "device_link": "链接", + "device_modal_confirm_shutdown_desc": "您确定要关闭 {device} 吗?", + "device_modal_confirm_shutdown_title": "关闭 {device}?", + "device_modal_confirm_wake_desc": "您确定要唤醒 {device} 吗?", + "device_modal_confirm_wake_title": "唤醒 {device}?", + "device_network_scan_add_all": "添加全部设备", + "device_network_scan_desc": "自动扫描网络中的设备. 要实现这一点, 您需要以超级用户/管理员身份运行 UpSnap, 并在您的 $PATH 中安装和使用nmap(对于docker用户, 您不需要执行任何操作). 扫描可能需要一些时间.", + "device_network_scan_include_unknown": "包括名称为 “Unknown” 的设备", + "device_network_scan_ip_range": "IP 范围", + "device_network_scan_ip": "IP:", + "device_network_scan_mac_vendor": "Mac 供应商:", + "device_network_scan_mac": "Mac:", + "device_network_scan_netmask": "子网掩码:", + "device_network_scan_new_netmask": "新子网掩码", + "device_network_scan_no_range": "无扫描范围", + "device_network_scan_range_saved": "扫描范围已保存", + "device_network_scan_replace_netmask": "更换所有设备的子网掩码?", + "device_network_scan_running": "扫描中", + "device_network_scan_unsaved_changes": "未保存的更改", + "device_network_scan": "扫描", + "device_page_title": "新设备", + "device_password_desc": "一些网卡允许为 magic packets 设置密码, 也可以称之为 SecureON. 密码长度只能为0、4或6个字符.", + "device_password": "密码", + "device_ping_cmd": "自定义 ping 命令", + "device_ping_desc": "您可以使用自定义 shell 命令来查看设备是否已接通电源。该命令应返回 0 的退出代码,表示设备电源已打开,任何其他退出代码都将标记设备电源已关闭。", + "device_ping": "Ping", + "device_ports_add_new": "添加端口", + "device_ports_desc": "UpSnap 可以检查设备端口是否正常.", + "device_ports_name": "名称", + "device_ports_number": "端口号", + "device_ports": "端口", + "device_require_confirmation": "二次确认", + "device_shutdown_cmd": "关机命令", + "device_shutdown_cron_desc": "就像设置计划任务来唤醒设备一样, 您也可以设置计划任务来关闭该设备.", + "device_shutdown_cron_enable": "启用定时关机", + "device_shutdown_cron": "关机计划任务", + "device_shutdown_desc": "此 shell 命令 将在您的容器内运行 (如果使用的是Docker) 或在您的主机上运行. 要验证该命令是否有效, 您可以在容器内或主机上的shell中运行该命令. 通常在 Windows 上使用 net rpc, Linux上使用 sshpass 或者针对Web请求使用 curl.", + "device_shutdown_examples_linux": "关闭远程 Linux 主机:", + "device_shutdown_examples_windows": "关闭远程 Windows 主机:", + "device_shutdown_examples": "示例:", + "device_shutdown": "关机", + "device_sol_authorization": "认证", + "device_sol_desc1": "您可以使用 Sleep-On-LAN 工具让计算机进入睡眠状态. Sleep-On-LAN (SOL) 是一个外部的工具/守护程序, 它在您想要进入休眠状态的PC上运行并提供RestApi接口. 有关 Sleep-On-LAN 设置的说明, 请参阅文档 Usage 部分.", + "device_sol_desc2": "SOL 配置为通过HTTP而不是UDP发送请求, 以启用认证功能并使请求更可靠", + "device_sol_desc3": "因此, 请确保在 SOL 配置 的 Listeners 部分中包含HTTP:<YOURPORT>", + "device_sol_enable": "启用 Sleep-On-LAN", + "device_sol_password": "SOL 密码", + "device_sol_port": "SOL 端口", + "device_sol_user": "SOL 账号", + "device_sol": "Sleep-On-LAN", + "device_tabs.0": "手动配置", + "device_tabs.1": "网络扫描", + "device_wake_cmd": "自定义唤醒命令", + "device_wake_cron_enable": "启用定时唤醒", + "device_wake_cron": "唤醒计划任务", + "device_wake_desc": "您可以通过计划任务来唤醒设备.", + "device_wake": "唤醒", + "home_add_first_device": "添加您的第一台设备", + "home_grant_permissions": "请联系管理员授予您相应权限.", + "home_no_devices": "还没有任何设备", + "home_order_groups": "分组", + "home_order_ip": "IP地址", + "home_order_name": "名称", + "home_order_tooltip": "排序", + "home_page_title": "首页", + "home_search_placeholder": "搜索设备", + "login_btn_login": "登录", + "login_btn_more": "更多", + "login_email_label": "邮箱/用户名:", + "login_menu_title_auth_providers": "其他身份验证提供程序", + "login_password_label": "密码:", + "login_welcome": "欢迎使用", + "navbar_edit_account": "编辑账户", + "navbar_logout": "退出", + "navbar_new": "新增", + "navbar_theme": "主题", + "settings_icon_desc": "设置一个自定义图标. 支持的文件类型:", + "settings_icon_title": "图标", + "settings_invalid_cron": "无效的 cron 语法", + "settings_lazy_ping_desc": "当开关打开时, UpSnap 只会在用户访问网站期间进行 ping 操作.", + "settings_lazy_ping_enable": "启用", + "settings_lazy_ping_title": "Lazy ping", + "settings_page_title": "设置", + "settings_ping_interval_desc1": "设置 ping 的间隔。为空时使用默认值 @every 3s.", + "settings_ping_interval_desc2": "有关 cron 的更多信息, 请访问Wikipedia 或参阅 cron 文档.", + "settings_ping_interval_title": "Ping 间隔", + "settings_upsnap_version": "UpSnap 版本", + "settings_website_title_desc": "设置在浏览器选项卡和网站中显示标题", + "settings_website_title_title": "网站标题", + "toasts_admin_saved": "账户信息已保存", + "toasts_device_created": "已创建 {device}", + "toasts_device_deleted": "已删除 {device}", + "toasts_device_updated": "已更新 {device}", + "toasts_devices_created_multiple": "已创建 {count} 个设备", + "toasts_group_created": "已创建组 {group}", + "toasts_group_deleted": "已删除组 {group}", + "toasts_no_permission": "您没有权限访问 {url}", + "toasts_password_changed": "密码已修改, 请重新登录.", + "toasts_passwords_missmatch": "两次输入的密码不匹配", + "toasts_permissions_created": "用户 {username} 的权限已创建", + "toasts_permissions_deleted": "用户 {username} 的权限已删除", + "toasts_permissions_updated_personal": "您的权限已更新", + "toasts_permissions_updated": "用户 {username} 的权限已更新", + "toasts_settings_saved": "设置已保存", + "toasts_user_created": "用户 {username} 已创建", + "toasts_user_deleted": "用户 {username} 已删除", + "toasts_user_saved": "账户信息已保存", + "users_allow_create_devices": "允许 {username} 创建新设备和编辑设备组", + "users_confirm_delete_desc": "您确定要删除 {username} 吗?", + "users_confirm_delete_title": "确认删除", + "users_create_new_device": "创建新设备", + "users_create_new_user": "新增用户", + "users_delete": "删除", + "users_device_permissions": "设备权限", + "users_page_title": "用户", + "users_password_confirm": "确认密码", + "users_password": "密码", + "users_power": "电源", + "users_read": "查看", + "users_required_field": "必填字段", + "users_toggle": "全选", + "users_update": "更新", + "users_username": "用户名", + "welcome_not_expected_back": "返回", + "welcome_not_expected_desc": "您已经完成了设置, 无需再次设置", + "welcome_not_expected_title": "意料之外! 🧐", + "welcome_progress_step1": "欢迎", + "welcome_progress_step2": "创建账号", + "welcome_progress_step3": "完成", + "welcome_step1_page_title": "欢迎使用 UpSnap 🥳", + "welcome_step1_setup_btn_next": "下一步", + "welcome_step1_setup_desc": "初次使用, 请依照指示完成下列步骤.", + "welcome_step2_btn_create": "创建", + "welcome_step2_label_email": "邮箱:", + "welcome_step2_label_min_chars": "请输入至少10个字符", + "welcome_step2_label_password_confirm": "确认密码:", + "welcome_step2_label_password": "密码:", + "welcome_step2_page_title": "创建管理员账号", + "welcome_step3_btn_done": "开始使用!", + "welcome_step3_page_desc": "继续向您的仪表板添加一些设备.", + "welcome_step3_page_title": "一切就绪! 🎉" +} diff --git a/frontend/package.json b/frontend/package.json index 8a3ecbf0..abac052e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "scripts": { - "dev": "npm-run-all --parallel vite typesafe-i18n", + "dev": "vite dev", "vite": "vite dev", "build": "vite build", "preview": "vite preview", @@ -12,11 +12,13 @@ "lint": "eslint --fix --cache .", "format": "prettier --write --cache --cache-strategy content --ignore-path ../.gitignore .", "prepare": "cd .. && husky frontend/.husky", - "typesafe-i18n": "typesafe-i18n" + "machine-translate": "inlang machine translate --project project.inlang" }, "devDependencies": { "@eslint/compat": "^1.2.7", "@eslint/js": "^9.21.0", + "@inlang/cli": "^3.0.0", + "@inlang/paraglide-js": "2.0.0-beta.26", "@sveltejs/adapter-static": "^3.0.8", "@sveltejs/kit": "^2.18.0", "@sveltejs/vite-plugin-svelte": "^5.0.3", @@ -47,13 +49,11 @@ "@tailwindcss/postcss": "^4.0.9", "cron-parser": "^4.9.0", "date-fns": "^4.1.0", - "npm-run-all": "^4.1.5", "pocketbase": "^0.25.2", "postcss": "^8.5.3", "svelte-fa": "^4.0.3", "svelte-french-toast": "2.0.0-alpha.0", - "theme-change": "^2.5.0", - "typesafe-i18n": "^5.26.2" + "theme-change": "^2.5.0" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 35aea732..da81b478 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -19,9 +19,6 @@ importers: date-fns: specifier: ^4.1.0 version: 4.1.0 - npm-run-all: - specifier: ^4.1.5 - version: 4.1.5 pocketbase: specifier: ^0.25.2 version: 0.25.2 @@ -37,9 +34,6 @@ importers: theme-change: specifier: ^2.5.0 version: 2.5.0 - typesafe-i18n: - specifier: ^5.26.2 - version: 5.26.2(typescript@5.8.2) devDependencies: '@eslint/compat': specifier: ^1.2.7 @@ -47,6 +41,12 @@ importers: '@eslint/js': specifier: ^9.21.0 version: 9.21.0 + '@inlang/cli': + specifier: ^3.0.0 + version: 3.0.3 + '@inlang/paraglide-js': + specifier: 2.0.0-beta.26 + version: 2.0.0-beta.26 '@sveltejs/adapter-static': specifier: ^3.0.8 version: 3.0.8(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@5.0.3(svelte@5.22.1)(vite@6.2.0(jiti@2.4.2)(lightningcss@1.29.1)))(svelte@5.22.1)(vite@6.2.0(jiti@2.4.2)(lightningcss@1.29.1))) @@ -464,6 +464,34 @@ packages: } engines: { node: '>=18.18' } + '@inlang/cli@3.0.3': + resolution: + { + integrity: sha512-2EEYjlOjlJdfvDpk15Gjr5Y+ALE6qX2vruXO6yUnIhrmviuQwHMvdqpFz8NdPtpvG58eTgctju71gTiVt6c5AA== + } + engines: { node: '>=18.0.0' } + hasBin: true + + '@inlang/paraglide-js@2.0.0-beta.26': + resolution: + { + integrity: sha512-D7WGs9j1beK32xrEDQ9GY/+QqBrqaakwLqUZCZ3r0wJVVk6j5PjEODxjJrlWTrs/33tQWGA/YK5d3MUkksCDNQ== + } + hasBin: true + + '@inlang/recommend-sherlock@0.2.1': + resolution: + { + integrity: sha512-ckv8HvHy/iTqaVAEKrr+gnl+p3XFNwe5D2+6w6wJk2ORV2XkcRkKOJ/XsTUJbPSiyi4PI+p+T3bqbmNx/rDUlg== + } + + '@inlang/sdk@2.4.1': + resolution: + { + integrity: sha512-JKsbFs/z2rv/2vPR6ZWDC3PWLX9COQPRYADNlbFl2omqkM2Dl5g7X/jIPDkTV85NccOimSf6Y/d1zqK5p5K4zA== + } + engines: { node: '>=18.0.0' } + '@jridgewell/gen-mapping@0.3.8': resolution: { @@ -497,6 +525,19 @@ packages: integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== } + '@lix-js/sdk@0.4.1': + resolution: + { + integrity: sha512-8v9gkLuEa/VXLkDwuXLr+wjZY1D7dPXVhez97jJULYoKurLVuhh2SH/Sv4jF43biV0wee44PGADrFPuU00lnsQ== + } + engines: { node: '>=21' } + + '@lix-js/server-api-schema@0.1.1': + resolution: + { + integrity: sha512-W1Z7KKOxAQ4Dag9V2wrDevHPh5rPk+icBUsxNfNCNB2tlPrKpba99562vcTCPoT03KXpihEbWutZNujCRtMA+g== + } + '@nodelib/fs.scandir@2.1.5': resolution: { @@ -676,6 +717,19 @@ packages: cpu: [x64] os: [win32] + '@sinclair/typebox@0.31.28': + resolution: + { + integrity: sha512-/s55Jujywdw/Jpan+vsy6JZs1z2ZTGxTmbZTPiuSL2wz9mfzA2gN1zzaqmvfi4pq+uOt7Du85fkiwv5ymW84aQ== + } + + '@sqlite.org/sqlite-wasm@3.48.0-build4': + resolution: + { + integrity: sha512-hI6twvUkzOmyGZhQMza1gpfqErZxXRw6JEsiVjUbo7tFanVD+8Oil0Ih3l2nGzHdxPI41zFmfUQG7GHqhciKZQ== + } + hasBin: true + '@sveltejs/acorn-typescript@1.0.5': resolution: { @@ -954,13 +1008,6 @@ packages: integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== } - ansi-styles@3.2.1: - resolution: - { - integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - } - engines: { node: '>=4' } - ansi-styles@4.3.0: resolution: { @@ -981,33 +1028,11 @@ packages: } engines: { node: '>= 0.4' } - array-buffer-byte-length@1.0.2: + array-timsort@1.0.3: resolution: { - integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ== } - engines: { node: '>= 0.4' } - - arraybuffer.prototype.slice@1.0.4: - resolution: - { - integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== - } - engines: { node: '>= 0.4' } - - async-function@1.0.0: - resolution: - { - integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== - } - engines: { node: '>= 0.4' } - - available-typed-arrays@1.0.7: - resolution: - { - integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== - } - engines: { node: '>= 0.4' } axobject-query@4.1.0: resolution: @@ -1041,27 +1066,6 @@ packages: } engines: { node: '>=8' } - call-bind-apply-helpers@1.0.2: - resolution: - { - integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - } - engines: { node: '>= 0.4' } - - call-bind@1.0.8: - resolution: - { - integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - } - engines: { node: '>= 0.4' } - - call-bound@1.0.4: - resolution: - { - integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - } - engines: { node: '>= 0.4' } - callsites@3.1.0: resolution: { @@ -1069,13 +1073,6 @@ packages: } engines: { node: '>=6' } - chalk@2.4.2: - resolution: - { - integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - } - engines: { node: '>=4' } - chalk@4.1.2: resolution: { @@ -1097,12 +1094,6 @@ packages: } engines: { node: '>=6' } - color-convert@1.9.3: - resolution: - { - integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - } - color-convert@2.0.1: resolution: { @@ -1110,24 +1101,39 @@ packages: } engines: { node: '>=7.0.0' } - color-name@1.1.3: - resolution: - { - integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - } - color-name@1.1.4: resolution: { integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== } + commander@11.1.0: + resolution: + { + integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ== + } + engines: { node: '>=16' } + + comment-json@4.2.5: + resolution: + { + integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw== + } + engines: { node: '>= 6' } + concat-map@0.0.1: resolution: { integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== } + consola@3.4.0: + resolution: + { + integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA== + } + engines: { node: ^14.18.0 || >=16.10.0 } + cookie@0.6.0: resolution: { @@ -1135,6 +1141,12 @@ packages: } engines: { node: '>= 0.6' } + core-util-is@1.0.3: + resolution: + { + integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + } + cron-parser@4.9.0: resolution: { @@ -1142,13 +1154,6 @@ packages: } engines: { node: '>=12.0.0' } - cross-spawn@6.0.6: - resolution: - { - integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== - } - engines: { node: '>=4.8' } - cross-spawn@7.0.6: resolution: { @@ -1170,27 +1175,6 @@ packages: integrity: sha512-U0K9Bac3Bi3zZGm6ojrw12F0vBHTpEgf46zv/BYxLe07hF0Xnx7emIQliwaRBgJuYhY0BhwQ6wSnq5cJXHA2yA== } - data-view-buffer@1.0.2: - resolution: - { - integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== - } - engines: { node: '>= 0.4' } - - data-view-byte-length@1.0.2: - resolution: - { - integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== - } - engines: { node: '>= 0.4' } - - data-view-byte-offset@1.0.1: - resolution: - { - integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== - } - engines: { node: '>= 0.4' } - date-fns@4.1.0: resolution: { @@ -1209,6 +1193,17 @@ packages: supports-color: optional: true + dedent@1.5.1: + resolution: + { + integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== + } + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + deep-is@0.1.4: resolution: { @@ -1222,20 +1217,6 @@ packages: } engines: { node: '>=0.10.0' } - define-data-property@1.1.4: - resolution: - { - integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - } - engines: { node: '>= 0.4' } - - define-properties@1.2.1: - resolution: - { - integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - } - engines: { node: '>= 0.4' } - detect-libc@1.0.3: resolution: { @@ -1250,13 +1231,6 @@ packages: integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw== } - dunder-proto@1.0.1: - resolution: - { - integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - } - engines: { node: '>= 0.4' } - enhanced-resolve@5.18.1: resolution: { @@ -1264,53 +1238,13 @@ packages: } engines: { node: '>=10.13.0' } - error-ex@1.3.2: + esbuild-wasm@0.19.12: resolution: { - integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + integrity: sha512-Zmc4hk6FibJZBcTx5/8K/4jT3/oG1vkGTEeKJUQFCUQKimD6Q7+adp/bdVQyYJFolMKaXkQnVZdV4O5ZaTYmyQ== } - - es-abstract@1.23.9: - resolution: - { - integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== - } - engines: { node: '>= 0.4' } - - es-define-property@1.0.1: - resolution: - { - integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - } - engines: { node: '>= 0.4' } - - es-errors@1.3.0: - resolution: - { - integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - } - engines: { node: '>= 0.4' } - - es-object-atoms@1.1.1: - resolution: - { - integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - } - engines: { node: '>= 0.4' } - - es-set-tostringtag@2.1.0: - resolution: - { - integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - } - engines: { node: '>= 0.4' } - - es-to-primitive@1.3.0: - resolution: - { - integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== - } - engines: { node: '>= 0.4' } + engines: { node: '>=12' } + hasBin: true esbuild@0.25.0: resolution: @@ -1320,13 +1254,6 @@ packages: engines: { node: '>=18' } hasBin: true - escape-string-regexp@1.0.5: - resolution: - { - integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - } - engines: { node: '>=0.8.0' } - escape-string-regexp@4.0.0: resolution: { @@ -1426,6 +1353,14 @@ packages: } engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } + esprima@4.0.1: + resolution: + { + integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + } + engines: { node: '>=4' } + hasBin: true + esquery@1.6.0: resolution: { @@ -1536,13 +1471,6 @@ packages: integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== } - for-each@0.3.5: - resolution: - { - integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== - } - engines: { node: '>= 0.4' } - fsevents@2.3.3: resolution: { @@ -1551,46 +1479,6 @@ packages: engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } os: [darwin] - function-bind@1.1.2: - resolution: - { - integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - } - - function.prototype.name@1.1.8: - resolution: - { - integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== - } - engines: { node: '>= 0.4' } - - functions-have-names@1.2.3: - resolution: - { - integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - } - - get-intrinsic@1.3.0: - resolution: - { - integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== - } - engines: { node: '>= 0.4' } - - get-proto@1.0.1: - resolution: - { - integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - } - engines: { node: '>= 0.4' } - - get-symbol-description@1.1.0: - resolution: - { - integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== - } - engines: { node: '>= 0.4' } - glob-parent@5.1.2: resolution: { @@ -1619,20 +1507,6 @@ packages: } engines: { node: '>=18' } - globalthis@1.0.4: - resolution: - { - integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== - } - engines: { node: '>= 0.4' } - - gopd@1.2.0: - resolution: - { - integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - } - engines: { node: '>= 0.4' } - graceful-fs@4.2.11: resolution: { @@ -1645,20 +1519,6 @@ packages: integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== } - has-bigints@1.1.0: - resolution: - { - integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== - } - engines: { node: '>= 0.4' } - - has-flag@3.0.0: - resolution: - { - integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - } - engines: { node: '>=4' } - has-flag@4.0.0: resolution: { @@ -1666,45 +1526,19 @@ packages: } engines: { node: '>=8' } - has-property-descriptors@1.0.2: + has-own-prop@2.0.0: resolution: { - integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ== } + engines: { node: '>=8' } - has-proto@1.2.0: + human-id@4.1.1: resolution: { - integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== - } - engines: { node: '>= 0.4' } - - has-symbols@1.1.0: - resolution: - { - integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - } - engines: { node: '>= 0.4' } - - has-tostringtag@1.0.2: - resolution: - { - integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - } - engines: { node: '>= 0.4' } - - hasown@2.0.2: - resolution: - { - integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - } - engines: { node: '>= 0.4' } - - hosted-git-info@2.8.9: - resolution: - { - integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg== } + hasBin: true husky@9.1.7: resolution: @@ -1741,75 +1575,6 @@ packages: } engines: { node: '>=0.8.19' } - internal-slot@1.1.0: - resolution: - { - integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== - } - engines: { node: '>= 0.4' } - - is-array-buffer@3.0.5: - resolution: - { - integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== - } - engines: { node: '>= 0.4' } - - is-arrayish@0.2.1: - resolution: - { - integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - } - - is-async-function@2.1.1: - resolution: - { - integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== - } - engines: { node: '>= 0.4' } - - is-bigint@1.1.0: - resolution: - { - integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== - } - engines: { node: '>= 0.4' } - - is-boolean-object@1.2.2: - resolution: - { - integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== - } - engines: { node: '>= 0.4' } - - is-callable@1.2.7: - resolution: - { - integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - } - engines: { node: '>= 0.4' } - - is-core-module@2.16.1: - resolution: - { - integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== - } - engines: { node: '>= 0.4' } - - is-data-view@1.0.2: - resolution: - { - integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== - } - engines: { node: '>= 0.4' } - - is-date-object@1.1.0: - resolution: - { - integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== - } - engines: { node: '>= 0.4' } - is-extglob@2.1.1: resolution: { @@ -1817,20 +1582,6 @@ packages: } engines: { node: '>=0.10.0' } - is-finalizationregistry@1.1.1: - resolution: - { - integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== - } - engines: { node: '>= 0.4' } - - is-generator-function@1.1.0: - resolution: - { - integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== - } - engines: { node: '>= 0.4' } - is-glob@4.0.3: resolution: { @@ -1838,20 +1589,6 @@ packages: } engines: { node: '>=0.10.0' } - is-map@2.0.3: - resolution: - { - integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== - } - engines: { node: '>= 0.4' } - - is-number-object@1.1.1: - resolution: - { - integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== - } - engines: { node: '>= 0.4' } - is-number@7.0.0: resolution: { @@ -1865,75 +1602,6 @@ packages: integrity: sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw== } - is-regex@1.2.1: - resolution: - { - integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== - } - engines: { node: '>= 0.4' } - - is-set@2.0.3: - resolution: - { - integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== - } - engines: { node: '>= 0.4' } - - is-shared-array-buffer@1.0.4: - resolution: - { - integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== - } - engines: { node: '>= 0.4' } - - is-string@1.1.1: - resolution: - { - integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== - } - engines: { node: '>= 0.4' } - - is-symbol@1.1.1: - resolution: - { - integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== - } - engines: { node: '>= 0.4' } - - is-typed-array@1.1.15: - resolution: - { - integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== - } - engines: { node: '>= 0.4' } - - is-weakmap@2.0.2: - resolution: - { - integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== - } - engines: { node: '>= 0.4' } - - is-weakref@1.1.1: - resolution: - { - integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== - } - engines: { node: '>= 0.4' } - - is-weakset@2.0.4: - resolution: - { - integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== - } - engines: { node: '>= 0.4' } - - isarray@2.0.5: - resolution: - { - integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - } - isexe@2.0.0: resolution: { @@ -1947,6 +1615,12 @@ packages: } hasBin: true + js-sha256@0.11.0: + resolution: + { + integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q== + } + js-yaml@4.1.0: resolution: { @@ -1960,12 +1634,6 @@ packages: integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== } - json-parse-better-errors@1.0.2: - resolution: - { - integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - } - json-schema-traverse@0.4.1: resolution: { @@ -1978,6 +1646,14 @@ packages: integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== } + json5@2.2.3: + resolution: + { + integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + } + engines: { node: '>=6' } + hasBin: true + keyv@4.5.4: resolution: { @@ -1997,6 +1673,13 @@ packages: integrity: sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A== } + kysely@0.27.6: + resolution: + { + integrity: sha512-FIyV/64EkKhJmjgC0g2hygpBv5RNWVPyNCqSAD7eTCv6eFWNIi4PN1UvdSJGicN/o35bnevgis4Y0UDC0qi8jQ== + } + engines: { node: '>=14.0.0' } + levn@0.4.1: resolution: { @@ -2108,13 +1791,6 @@ packages: } engines: { node: '>=10' } - load-json-file@4.0.0: - resolution: - { - integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== - } - engines: { node: '>=4' } - locate-character@3.0.0: resolution: { @@ -2147,20 +1823,6 @@ packages: integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== } - math-intrinsics@1.1.0: - resolution: - { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - } - engines: { node: '>= 0.4' } - - memorystream@0.3.1: - resolution: - { - integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - } - engines: { node: '>= 0.10.0' } - merge2@1.4.1: resolution: { @@ -2222,47 +1884,6 @@ packages: integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== } - nice-try@1.0.5: - resolution: - { - integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - } - - normalize-package-data@2.5.0: - resolution: - { - integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - } - - npm-run-all@4.1.5: - resolution: - { - integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - } - engines: { node: '>= 4' } - hasBin: true - - object-inspect@1.13.4: - resolution: - { - integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== - } - engines: { node: '>= 0.4' } - - object-keys@1.1.1: - resolution: - { - integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - } - engines: { node: '>= 0.4' } - - object.assign@4.1.7: - resolution: - { - integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== - } - engines: { node: '>= 0.4' } - optionator@0.9.4: resolution: { @@ -2270,13 +1891,6 @@ packages: } engines: { node: '>= 0.8.0' } - own-keys@1.0.1: - resolution: - { - integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== - } - engines: { node: '>= 0.4' } - p-limit@3.1.0: resolution: { @@ -2298,13 +1912,6 @@ packages: } engines: { node: '>=6' } - parse-json@4.0.0: - resolution: - { - integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== - } - engines: { node: '>=4' } - path-exists@4.0.0: resolution: { @@ -2312,13 +1919,6 @@ packages: } engines: { node: '>=8' } - path-key@2.0.1: - resolution: - { - integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - } - engines: { node: '>=4' } - path-key@3.1.1: resolution: { @@ -2326,19 +1926,6 @@ packages: } engines: { node: '>=8' } - path-parse@1.0.7: - resolution: - { - integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - } - - path-type@3.0.0: - resolution: - { - integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - } - engines: { node: '>=4' } - picocolors@1.1.1: resolution: { @@ -2352,34 +1939,12 @@ packages: } engines: { node: '>=8.6' } - pidtree@0.3.1: - resolution: - { - integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - } - engines: { node: '>=0.10' } - hasBin: true - - pify@3.0.0: - resolution: - { - integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== - } - engines: { node: '>=4' } - pocketbase@0.25.2: resolution: { integrity: sha512-ONZl1+qHJMnhR2uacBlBJ90lm7njtL/zy0606+1ROfK9hSL4LRBRc8r89rMcNRzPzRqCNyoFTh2Qg/lYXdEC1w== } - possible-typed-array-names@1.1.0: - resolution: - { - integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== - } - engines: { node: '>= 0.4' } - postcss-load-config@3.1.4: resolution: { @@ -2522,13 +2087,6 @@ packages: integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== } - read-pkg@3.0.0: - resolution: - { - integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - } - engines: { node: '>=4' } - readdirp@4.1.2: resolution: { @@ -2536,19 +2094,12 @@ packages: } engines: { node: '>= 14.18.0' } - reflect.getprototypeof@1.0.10: + repeat-string@1.6.1: resolution: { - integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== } - engines: { node: '>= 0.4' } - - regexp.prototype.flags@1.5.4: - resolution: - { - integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== - } - engines: { node: '>= 0.4' } + engines: { node: '>=0.10' } resolve-from@4.0.0: resolution: @@ -2557,14 +2108,6 @@ packages: } engines: { node: '>=4' } - resolve@1.22.10: - resolution: - { - integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== - } - engines: { node: '>= 0.4' } - hasBin: true - reusify@1.1.0: resolution: { @@ -2593,34 +2136,6 @@ packages: } engines: { node: '>=6' } - safe-array-concat@1.1.3: - resolution: - { - integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== - } - engines: { node: '>=0.4' } - - safe-push-apply@1.0.0: - resolution: - { - integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== - } - engines: { node: '>= 0.4' } - - safe-regex-test@1.1.0: - resolution: - { - integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== - } - engines: { node: '>= 0.4' } - - semver@5.7.2: - resolution: - { - integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - } - hasBin: true - semver@7.7.1: resolution: { @@ -2635,34 +2150,6 @@ packages: integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ== } - set-function-length@1.2.2: - resolution: - { - integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== - } - engines: { node: '>= 0.4' } - - set-function-name@2.0.2: - resolution: - { - integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== - } - engines: { node: '>= 0.4' } - - set-proto@1.0.0: - resolution: - { - integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== - } - engines: { node: '>= 0.4' } - - shebang-command@1.2.0: - resolution: - { - integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - } - engines: { node: '>=0.10.0' } - shebang-command@2.0.0: resolution: { @@ -2670,13 +2157,6 @@ packages: } engines: { node: '>=8' } - shebang-regex@1.0.0: - resolution: - { - integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - } - engines: { node: '>=0.10.0' } - shebang-regex@3.0.0: resolution: { @@ -2684,41 +2164,6 @@ packages: } engines: { node: '>=8' } - shell-quote@1.8.2: - resolution: - { - integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== - } - engines: { node: '>= 0.4' } - - side-channel-list@1.0.0: - resolution: - { - integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - } - engines: { node: '>= 0.4' } - - side-channel-map@1.0.1: - resolution: - { - integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - } - engines: { node: '>= 0.4' } - - side-channel-weakmap@1.0.2: - resolution: - { - integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - } - engines: { node: '>= 0.4' } - - side-channel@1.1.0: - resolution: - { - integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== - } - engines: { node: '>= 0.4' } - sirv@3.0.1: resolution: { @@ -2733,64 +2178,13 @@ packages: } engines: { node: '>=0.10.0' } - spdx-correct@3.2.0: + sqlite-wasm-kysely@0.3.0: resolution: { - integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + integrity: sha512-TzjBNv7KwRw6E3pdKdlRyZiTmUIE0UttT/Sl56MVwVARl/u5gp978KepazCJZewFUnlWHz9i3NQd4kOtP/Afdg== } - - spdx-exceptions@2.5.0: - resolution: - { - integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== - } - - spdx-expression-parse@3.0.1: - resolution: - { - integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - } - - spdx-license-ids@3.0.21: - resolution: - { - integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== - } - - string.prototype.padend@3.1.6: - resolution: - { - integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q== - } - engines: { node: '>= 0.4' } - - string.prototype.trim@1.2.10: - resolution: - { - integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== - } - engines: { node: '>= 0.4' } - - string.prototype.trimend@1.0.9: - resolution: - { - integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== - } - engines: { node: '>= 0.4' } - - string.prototype.trimstart@1.0.8: - resolution: - { - integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== - } - engines: { node: '>= 0.4' } - - strip-bom@3.0.0: - resolution: - { - integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - } - engines: { node: '>=4' } + peerDependencies: + kysely: '*' strip-json-comments@3.1.1: resolution: @@ -2799,13 +2193,6 @@ packages: } engines: { node: '>=8' } - supports-color@5.5.0: - resolution: - { - integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - } - engines: { node: '>=4' } - supports-color@7.2.0: resolution: { @@ -2813,13 +2200,6 @@ packages: } engines: { node: '>=8' } - supports-preserve-symlinks-flag@1.0.0: - resolution: - { - integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - } - engines: { node: '>= 0.4' } - svelte-check@4.1.4: resolution: { @@ -2929,43 +2309,6 @@ packages: } engines: { node: '>= 0.8.0' } - typed-array-buffer@1.0.3: - resolution: - { - integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== - } - engines: { node: '>= 0.4' } - - typed-array-byte-length@1.0.3: - resolution: - { - integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== - } - engines: { node: '>= 0.4' } - - typed-array-byte-offset@1.0.4: - resolution: - { - integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== - } - engines: { node: '>= 0.4' } - - typed-array-length@1.0.7: - resolution: - { - integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== - } - engines: { node: '>= 0.4' } - - typesafe-i18n@5.26.2: - resolution: - { - integrity: sha512-2QAriFmiY5JwUAJtG7yufoE/XZ1aFBY++wj7YFS2yo89a3jLBfKoWSdq5JfQYk1V2BS7V2c/u+KEcaCQoE65hw== - } - hasBin: true - peerDependencies: - typescript: '>=3.5.1' - typescript-eslint@8.26.0: resolution: { @@ -2984,12 +2327,12 @@ packages: engines: { node: '>=14.17' } hasBin: true - unbox-primitive@1.1.0: + unplugin@2.2.0: resolution: { - integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + integrity: sha512-m1ekpSwuOT5hxkJeZGRxO7gXbXT3gF26NjQ7GdVHoLoF8/nopLcd/QfPigpCy7i51oFHiRJg/CyHhj4vs2+KGw== } - engines: { node: '>= 0.4' } + engines: { node: '>=18.12.0' } uri-js@4.4.1: resolution: @@ -2997,17 +2340,24 @@ packages: integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== } + urlpattern-polyfill@10.0.0: + resolution: + { + integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg== + } + util-deprecate@1.0.2: resolution: { integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== } - validate-npm-package-license@3.0.4: + uuid@10.0.0: resolution: { - integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ== } + hasBin: true vite@6.2.0: resolution: @@ -3063,40 +2413,11 @@ packages: vite: optional: true - which-boxed-primitive@1.1.1: + webpack-virtual-modules@0.6.2: resolution: { - integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ== } - engines: { node: '>= 0.4' } - - which-builtin-type@1.2.1: - resolution: - { - integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== - } - engines: { node: '>= 0.4' } - - which-collection@1.0.2: - resolution: - { - integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== - } - engines: { node: '>= 0.4' } - - which-typed-array@1.1.18: - resolution: - { - integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA== - } - engines: { node: '>= 0.4' } - - which@1.3.1: - resolution: - { - integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - } - hasBin: true which@2.0.2: resolution: @@ -3281,6 +2602,39 @@ snapshots: '@humanwhocodes/retry@0.4.2': {} + '@inlang/cli@3.0.3': + dependencies: + '@inlang/sdk': 2.4.1 + esbuild-wasm: 0.19.12 + transitivePeerDependencies: + - babel-plugin-macros + + '@inlang/paraglide-js@2.0.0-beta.26': + dependencies: + '@inlang/recommend-sherlock': 0.2.1 + '@inlang/sdk': 2.4.1 + commander: 11.1.0 + consola: 3.4.0 + json5: 2.2.3 + unplugin: 2.2.0 + urlpattern-polyfill: 10.0.0 + transitivePeerDependencies: + - babel-plugin-macros + + '@inlang/recommend-sherlock@0.2.1': + dependencies: + comment-json: 4.2.5 + + '@inlang/sdk@2.4.1': + dependencies: + '@lix-js/sdk': 0.4.1 + '@sinclair/typebox': 0.31.28 + kysely: 0.27.6 + sqlite-wasm-kysely: 0.3.0(kysely@0.27.6) + uuid: 10.0.0 + transitivePeerDependencies: + - babel-plugin-macros + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 @@ -3298,6 +2652,20 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 + '@lix-js/sdk@0.4.1': + dependencies: + '@lix-js/server-api-schema': 0.1.1 + dedent: 1.5.1 + human-id: 4.1.1 + js-sha256: 0.11.0 + kysely: 0.27.6 + sqlite-wasm-kysely: 0.3.0(kysely@0.27.6) + uuid: 10.0.0 + transitivePeerDependencies: + - babel-plugin-macros + + '@lix-js/server-api-schema@0.1.1': {} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -3369,6 +2737,10 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.9': optional: true + '@sinclair/typebox@0.31.28': {} + + '@sqlite.org/sqlite-wasm@3.48.0-build4': {} + '@sveltejs/acorn-typescript@1.0.5(acorn@8.14.0)': dependencies: acorn: 8.14.0 @@ -3574,10 +2946,6 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -3586,26 +2954,7 @@ snapshots: aria-query@5.3.2: {} - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - async-function@1.0.0: {} - - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 + array-timsort@1.0.3: {} axobject-query@4.1.0: {} @@ -3624,31 +2973,8 @@ snapshots: dependencies: fill-range: 7.1.1 - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -3660,34 +2986,34 @@ snapshots: clsx@2.1.1: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} + commander@11.1.0: {} + + comment-json@4.2.5: + dependencies: + array-timsort: 1.0.3 + core-util-is: 1.0.3 + esprima: 4.0.1 + has-own-prop: 2.0.0 + repeat-string: 1.6.1 + concat-map@0.0.1: {} + consola@3.4.0: {} + cookie@0.6.0: {} + core-util-is@1.0.3: {} + cron-parser@4.9.0: dependencies: luxon: 3.5.0 - cross-spawn@6.0.6: - dependencies: - nice-try: 1.0.5 - path-key: 2.0.1 - semver: 5.7.2 - shebang-command: 1.2.0 - which: 1.3.1 - cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -3698,139 +3024,28 @@ snapshots: daisyui@5.0.0: {} - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - date-fns@4.1.0: {} debug@4.4.0: dependencies: ms: 2.1.3 + dedent@1.5.1: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - detect-libc@1.0.3: {} devalue@5.1.1: {} - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 - enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 + esbuild-wasm@0.19.12: {} esbuild@0.25.0: optionalDependencies: @@ -3860,8 +3075,6 @@ snapshots: '@esbuild/win32-ia32': 0.25.0 '@esbuild/win32-x64': 0.25.0 - escape-string-regexp@1.0.5: {} - escape-string-regexp@4.0.0: {} eslint-compat-utils@0.5.1(eslint@9.21.0(jiti@2.4.2)): @@ -3961,6 +3174,8 @@ snapshots: acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -4017,50 +3232,9 @@ snapshots: flatted@3.3.3: {} - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -4073,42 +3247,15 @@ snapshots: globals@15.15.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - - gopd@1.2.0: {} - graceful-fs@4.2.11: {} graphemer@1.4.0: {} - has-bigints@1.1.0: {} - - has-flag@3.0.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 + has-own-prop@2.0.0: {} - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - - hosted-git-info@2.8.9: {} + human-id@4.1.1: {} husky@9.1.7: {} @@ -4123,141 +3270,36 @@ snapshots: imurmurhash@0.1.4: {} - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 - - is-date-object@1.1.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-map@2.0.3: {} - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} is-reference@3.0.3: dependencies: '@types/estree': 1.0.6 - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.18 - - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - isarray@2.0.5: {} - isexe@2.0.0: {} jiti@2.4.2: {} + js-sha256@0.11.0: {} + js-yaml@4.1.0: dependencies: argparse: 2.0.1 json-buffer@3.0.1: {} - json-parse-better-errors@1.0.2: {} - json-schema-traverse@0.4.1: {} json-stable-stringify-without-jsonify@1.0.1: {} + json5@2.2.3: {} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -4266,6 +3308,8 @@ snapshots: known-css-properties@0.35.0: {} + kysely@0.27.6: {} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 @@ -4318,13 +3362,6 @@ snapshots: lilconfig@2.1.0: {} - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - locate-character@3.0.0: {} locate-path@6.0.0: @@ -4339,10 +3376,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - math-intrinsics@1.1.0: {} - - memorystream@0.3.1: {} - merge2@1.4.1: {} micromatch@4.0.8: @@ -4368,40 +3401,6 @@ snapshots: natural-compare@1.4.0: {} - nice-try@1.0.5: {} - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.10 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - npm-run-all@4.1.5: - dependencies: - ansi-styles: 3.2.1 - chalk: 2.4.2 - cross-spawn: 6.0.6 - memorystream: 0.3.1 - minimatch: 3.1.2 - pidtree: 0.3.1 - read-pkg: 3.0.0 - shell-quote: 1.8.2 - string.prototype.padend: 3.1.6 - - object-inspect@1.13.4: {} - - object-keys@1.1.1: {} - - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4411,12 +3410,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 @@ -4429,35 +3422,16 @@ snapshots: dependencies: callsites: 3.1.0 - parse-json@4.0.0: - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - path-exists@4.0.0: {} - path-key@2.0.1: {} - path-key@3.1.1: {} - path-parse@1.0.7: {} - - path-type@3.0.0: - dependencies: - pify: 3.0.0 - picocolors@1.1.1: {} picomatch@2.3.1: {} - pidtree@0.3.1: {} - - pify@3.0.0: {} - pocketbase@0.25.2: {} - possible-typed-array-names@1.1.0: {} - postcss-load-config@3.1.4(postcss@8.5.3): dependencies: lilconfig: 2.1.0 @@ -4503,42 +3477,12 @@ snapshots: queue-microtask@1.2.3: {} - read-pkg@3.0.0: - dependencies: - load-json-file: 4.0.0 - normalize-package-data: 2.5.0 - path-type: 3.0.0 - readdirp@4.1.2: {} - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 + repeat-string@1.6.1: {} resolve-from@4.0.0: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - reusify@1.1.0: {} rollup@4.34.9: @@ -4574,95 +3518,16 @@ snapshots: dependencies: mri: 1.2.0 - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - semver@5.7.2: {} - semver@7.7.1: {} set-cookie-parser@2.7.1: {} - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - - shebang-command@1.2.0: - dependencies: - shebang-regex: 1.0.0 - shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - shebang-regex@1.0.0: {} - shebang-regex@3.0.0: {} - shell-quote@1.8.2: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - sirv@3.0.1: dependencies: '@polka/url': 1.0.0-next.28 @@ -4671,64 +3536,17 @@ snapshots: source-map-js@1.2.1: {} - spdx-correct@3.2.0: + sqlite-wasm-kysely@0.3.0(kysely@0.27.6): dependencies: - spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.21 - - spdx-exceptions@2.5.0: {} - - spdx-expression-parse@3.0.1: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.21 - - spdx-license-ids@3.0.21: {} - - string.prototype.padend@3.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - strip-bom@3.0.0: {} + '@sqlite.org/sqlite-wasm': 3.48.0-build4 + kysely: 0.27.6 strip-json-comments@3.1.1: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} - svelte-check@4.1.4(svelte@5.22.1)(typescript@5.8.2): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -4803,43 +3621,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typesafe-i18n@5.26.2(typescript@5.8.2): - dependencies: - typescript: 5.8.2 - typescript-eslint@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: '@typescript-eslint/eslint-plugin': 8.26.0(@typescript-eslint/parser@8.26.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) @@ -4852,23 +3633,20 @@ snapshots: typescript@5.8.2: {} - unbox-primitive@1.1.0: + unplugin@2.2.0: dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 + acorn: 8.14.0 + webpack-virtual-modules: 0.6.2 uri-js@4.4.1: dependencies: punycode: 2.3.1 + urlpattern-polyfill@10.0.0: {} + util-deprecate@1.0.2: {} - validate-npm-package-license@3.0.4: - dependencies: - spdx-correct: 3.2.0 - spdx-expression-parse: 3.0.1 + uuid@10.0.0: {} vite@6.2.0(jiti@2.4.2)(lightningcss@1.29.1): dependencies: @@ -4884,49 +3662,7 @@ snapshots: optionalDependencies: vite: 6.2.0(jiti@2.4.2)(lightningcss@1.29.1) - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.18 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-typed-array@1.1.18: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - - which@1.3.1: - dependencies: - isexe: 2.0.0 + webpack-virtual-modules@0.6.2: {} which@2.0.2: dependencies: diff --git a/frontend/project.inlang/.gitignore b/frontend/project.inlang/.gitignore new file mode 100644 index 00000000..5e465967 --- /dev/null +++ b/frontend/project.inlang/.gitignore @@ -0,0 +1 @@ +cache \ No newline at end of file diff --git a/frontend/project.inlang/project_id b/frontend/project.inlang/project_id new file mode 100644 index 00000000..d006317a --- /dev/null +++ b/frontend/project.inlang/project_id @@ -0,0 +1 @@ +StfXY3tZWvr4FQntlM \ No newline at end of file diff --git a/frontend/project.inlang/settings.json b/frontend/project.inlang/settings.json new file mode 100644 index 00000000..f1005ddd --- /dev/null +++ b/frontend/project.inlang/settings.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://inlang.com/schema/project-settings", + "baseLocale": "en", + "locales": ["en", "de", "es", "fr", "id", "it", "ja", "nl", "pl", "pt", "zh-TW", "zh"], + "modules": [ + "https://cdn.jsdelivr.net/npm/@inlang/plugin-message-format@4/dist/index.js", + "https://cdn.jsdelivr.net/npm/@inlang/plugin-m-function-matcher@2/dist/index.js" + ], + "plugin.inlang.messageFormat": { + "pathPattern": "./messages/{locale}.json" + }, + "telemetry": "off" +} diff --git a/frontend/src/app.html b/frontend/src/app.html index c2cb0530..c250c9a7 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -1,5 +1,5 @@ - +
diff --git a/frontend/src/hooks.server.ts b/frontend/src/hooks.server.ts new file mode 100644 index 00000000..9b49d612 --- /dev/null +++ b/frontend/src/hooks.server.ts @@ -0,0 +1,14 @@ +import { paraglideMiddleware } from '$lib/paraglide/server'; +import { localeStore } from '$lib/stores/locale'; +import type { Handle } from '@sveltejs/kit'; + +// creating a handle to use the paraglide middleware +const paraglideHandle: Handle = ({ event, resolve }) => + paraglideMiddleware(event.request, ({ locale }) => { + localeStore.set(locale); + return resolve(event, { + transformPageChunk: ({ html }) => html.replace('%lang%', locale) + }); + }); + +export const handle: Handle = paraglideHandle; diff --git a/frontend/src/hooks.ts b/frontend/src/hooks.ts new file mode 100644 index 00000000..fd4a8459 --- /dev/null +++ b/frontend/src/hooks.ts @@ -0,0 +1,6 @@ +import { deLocalizeUrl } from '$lib/paraglide/runtime'; +import type { Reroute } from '@sveltejs/kit'; + +export const reroute: Reroute = (request) => { + return deLocalizeUrl(request.url).pathname; +}; diff --git a/frontend/src/lib/components/DeviceCard.svelte b/frontend/src/lib/components/DeviceCard.svelte index 59a43d0d..4decdfab 100644 --- a/frontend/src/lib/components/DeviceCard.svelte +++ b/frontend/src/lib/components/DeviceCard.svelte @@ -1,7 +1,7 @@ @@ -119,14 +119,14 @@ {#if $settingsPriv}- {$LL.device.network_scan_desc()} + {m.device_network_scan_desc()}
{$LL.account.change_password_body()}
+{m.account_change_password_body()}