From 0bd070b98eca7494d42f7e5c4a10eeef9cf2074c Mon Sep 17 00:00:00 2001 From: CreasolTech Date: Tue, 12 Mar 2024 07:26:47 +0100 Subject: [PATCH] Added Italian language --- src/Display_Graphic.cpp | 18 +- webapp/src/locales/index.ts | 32 +- webapp/src/locales/it.json | 624 ++++++++++++++++++++++++++++++++++++ 3 files changed, 665 insertions(+), 9 deletions(-) create mode 100644 webapp/src/locales/it.json diff --git a/src/Display_Graphic.cpp b/src/Display_Graphic.cpp index 3c7eaf1df..d91fb2fcc 100644 --- a/src/Display_Graphic.cpp +++ b/src/Display_Graphic.cpp @@ -20,21 +20,23 @@ std::map #define I18N_LOCALE_EN 0 #define I18N_LOCALE_DE 1 #define I18N_LOCALE_FR 2 +#define I18N_LOCALE_IT 3 // Languages supported. Note: the order is important and must match locale_translations.h const uint8_t languages[] = { I18N_LOCALE_EN, I18N_LOCALE_DE, - I18N_LOCALE_FR + I18N_LOCALE_FR, + I18N_LOCALE_IT }; -static const char* const i18n_offline[] = { "Offline", "Offline", "Offline" }; -static const char* const i18n_current_power_w[] = { "%.0f W", "%.0f W", "%.0f W" }; -static const char* const i18n_current_power_kw[] = { "%.1f kW", "%.1f kW", "%.1f kW" }; -static const char* const i18n_yield_today_wh[] = { "today: %4.0f Wh", "Heute: %4.0f Wh", "auj.: %4.0f Wh" }; -static const char* const i18n_yield_total_kwh[] = { "total: %.1f kWh", "Ges.: %.1f kWh", "total: %.1f kWh" }; -static const char* const i18n_yield_total_mwh[] = { "total: %.0f kWh", "Ges.: %.0f kWh", "total: %.0f kWh" }; -static const char* const i18n_date_format[] = { "%m/%d/%Y %H:%M", "%d.%m.%Y %H:%M", "%d/%m/%Y %H:%M" }; +static const char* const i18n_offline[] = { "Offline", "Offline", "Offline", "Offline" }; +static const char* const i18n_current_power_w[] = { "%.0f W", "%.0f W", "%.0f W", "%.0f W" }; +static const char* const i18n_current_power_kw[] = { "%.1f kW", "%.1f kW", "%.1f kW", "%.1f kW" }; +static const char* const i18n_yield_today_wh[] = { "today: %4.0f Wh", "Heute: %4.0f Wh", "auj.: %4.0f Wh", "oggi: %4.0f Wh" }; +static const char* const i18n_yield_total_kwh[] = { "total: %.1f kWh", "Ges.: %.1f kWh", "total: %.1f kWh", "totale: %.1f kWh" }; +static const char* const i18n_yield_total_mwh[] = { "total: %.0f kWh", "Ges.: %.0f kWh", "total: %.0f kWh", "totale: %.0f kWh" }; +static const char* const i18n_date_format[] = { "%m/%d/%Y %H:%M", "%d.%m.%Y %H:%M", "%d/%m/%Y %H:%M", "%d/%m/%Y %H:%M" }; DisplayGraphicClass::DisplayGraphicClass() : _loopTask(TASK_IMMEDIATE, TASK_FOREVER, std::bind(&DisplayGraphicClass::loop, this)) diff --git a/webapp/src/locales/index.ts b/webapp/src/locales/index.ts index 57589c7f6..1246a8e0e 100644 --- a/webapp/src/locales/index.ts +++ b/webapp/src/locales/index.ts @@ -4,12 +4,14 @@ export enum Locales { EN = 'en', DE = 'de', FR = 'fr', + IT = 'it', } export const LOCALES = [ { value: Locales.EN, caption: 'English' }, { value: Locales.DE, caption: 'Deutsch' }, { value: Locales.FR, caption: 'Français' }, + { value: Locales.IT, caption: 'Italiano' }, ] export const dateTimeFormats: I18nOptions["datetimeFormats"] = { @@ -45,6 +47,17 @@ export const dateTimeFormats: I18nOptions["datetimeFormats"] = { day: 'numeric', hour12: false } + }, + [Locales.IT]: { + 'datetime': { + hour: 'numeric', + minute: 'numeric', + second: 'numeric', + year: 'numeric', + month: 'numeric', + day: 'numeric', + hour12: false + } } }; @@ -100,6 +113,23 @@ export const numberFormats: I18nOptions["numberFormats"] = { style: 'unit', unit: 'kilobyte', }, }, + [Locales.IT]: { + decimal: { + style: 'decimal', + }, + decimalNoDigits: { + style: 'decimal', minimumFractionDigits: 0, maximumFractionDigits: 0 + }, + decimalTwoDigits: { + style: 'decimal', minimumFractionDigits: 2, maximumFractionDigits: 2 + }, + percent: { + style: 'percent', + }, + kilobyte: { + style: 'unit', unit: 'kilobyte', + }, + }, }; -export const defaultLocale = Locales.EN; \ No newline at end of file +export const defaultLocale = Locales.EN; diff --git a/webapp/src/locales/it.json b/webapp/src/locales/it.json new file mode 100644 index 000000000..bce3aa301 --- /dev/null +++ b/webapp/src/locales/it.json @@ -0,0 +1,624 @@ +{ + "menu": { + "LiveView": "Dati in tempo reale", + "Settings": "Impostazioni", + "NetworkSettings": "Impostazioni di rete", + "NTPSettings": "Impostazioni NTP", + "MQTTSettings": "Impostazioni MQTT", + "InverterSettings": "Impostazioni Inverter", + "SecuritySettings": "Impostazioni di Sicurezza", + "DTUSettings": "Impostazioni DTU", + "DeviceManager": "Gestione Dispositivi", + "ConfigManagement": "Gestione Configurazione", + "FirmwareUpgrade": "Aggiornamento Firmware", + "DeviceReboot": "Riavvio DTU", + "Info": "Info", + "System": "Sistema", + "Network": "Rete", + "NTP": "NTP", + "MQTT": "MQTT", + "Console": "Console", + "About": "Informazioni DTU", + "Logout": "Esci", + "Login": "Login" + }, + "base": { + "Loading": "Caricamento...", + "Reload": "Ricarica", + "Cancel": "Cancella", + "Save": "Salva", + "Refreshing": "Aggiorna", + "Pull": "Trascina in basso per aggiornare", + "Release": "Rilascia per aggiornare", + "Close": "Chiudi" + }, + "localeswitcher": { + "Dark": "Scuro", + "Light": "Chiaro", + "Auto": "Automatico" + }, + "apiresponse": { + "1001": "Settings saved!", + "1002": "No values found!", + "1003": "Data too large!", + "1004": "Failed to parse data!", + "1005": "Values are missing!", + "1006": "Write failed!", + "2001": "Serial cannot be zero!", + "2002": "Poll interval must be greater zero!", + "2003": "Invalid power level setting!", + "2004": "The frequency must be set between {min} and {max} kHz and must be a multiple of 250kHz!", + "2005": "Invalid country selection!", + "3001": "Not deleted anything!", + "3002": "Configuration resettet. Rebooting now...", + "4001": "@:apiresponse.2001", + "4002": "Name must between 1 and {max} characters long!", + "4003": "Only {max} inverters are supported!", + "4004": "Inverter created!", + "4005": "Invalid ID specified!", + "4006": "Invalid amount of max channel setting given!", + "4007": "Inverter changed!", + "4008": "Inverter deleted!", + "4009": "Inverter order saved!", + "5001": "@:apiresponse.2001", + "5002": "Limit must between 1 and {max}!", + "5003": "Invalid type specified!", + "5004": "Invalid inverter specified!", + "6001": "Reboot triggered!", + "6002": "Reboot cancled!", + "7001": "MQTT Server must between 1 and {max} characters long!", + "7002": "Username must not longer then {max} characters!", + "7003": "Password must not longer then {max} characters!", + "7004": "Topic must not longer then {max} characters!", + "7005": "Topic must not contain space characters!", + "7006": "Topic must end with slash (/)!", + "7007": "Port must be a number between 1 and 65535!", + "7008": "Certificate must not longer then {max} characters!", + "7009": "LWT topic must not longer then {max} characters!", + "7010": "LWT topic must not contain space characters!", + "7011": "LWT online value must not longer then {max} characters!", + "7012": "LWT offline value must not longer then {max} characters!", + "7013": "Publish interval must be a number between {min} and {max}!", + "7014": "Hass topic must not longer then {max} characters!", + "7015": "Hass topic must not contain space characters!", + "7016": "LWT QOS must not greater then {max}!", + "8001": "IP address is invalid!", + "8002": "Netmask is invalid!", + "8003": "Gateway is invalid!", + "8004": "DNS Server IP 1 is invalid!", + "8005": "DNS Server IP 2 is invalid!", + "8006": "Administrative AccessPoint Timeout value is invalid", + "9001": "NTP Server must between 1 and {max} characters long!", + "9002": "Timezone must between 1 and {max} characters long!", + "9003": "Timezone description must between 1 and {max} characters long!", + "9004": "Year must be a number between {min} and {max}!", + "9005": "Month must be a number between {min} and {max}!", + "9006": "Day must be a number between {min} and {max}!", + "9007": "Hour must be a number between {min} and {max}!", + "9008": "Minute must be a number between {min} and {max}!", + "9009": "Second must be a number between {min} and {max}!", + "9010": "Time updated!", + "10001": "Password must between 8 and {max} characters long!", + "10002": "Authentication successful!", + "11001": "@:apiresponse.2001", + "11002": "@:apiresponse:5004", + "12001": "Profil must between 1 and {max} characters long!" + }, + "home": { + "LiveData": "Dati in tempo reale", + "SerialNumber": "Numero seriale: ", + "CurrentLimit": "Limite attuale: ", + "DataAge": "Aggiornamento Dati: ", + "Seconds": "{val} secondi", + "ShowSetInverterLimit": "Mostra / Imposta Limite di Potenza", + "TurnOnOff": "Accendi/Spegni Inverter", + "ShowInverterInfo": "Mostra info Inverter", + "ShowEventlog": "Mostra Log Eventi", + "UnreadMessages": "msg non letti", + "Loading": "@:base.Loading", + "EventLog": "Log Eventi", + "InverterInfo": "Info Inverter", + "LimitSettings": "Impostazioni Limite Potenza", + "LastLimitSetStatus": "Stato ultimo limite impostato:", + "SetLimit": "Imposta Limite a:", + "Relative": "Percentuale (%)", + "Absolute": "Assoluto (W)", + "LimitHint": "Nota: Se imposti il limite assoluto, il valore sul display sarà aggiornato dopo circa 4 minuti.", + "SetPersistent": "Imposta Limite in Modo Persistente", + "SetNonPersistent": "Imposta Limite Temporaneamente", + "PowerSettings": "Impostazioni Potenza", + "LastPowerSetStatus": "Ultimo Stato dell'Inverter:", + "TurnOn": "Accendi Inverter", + "TurnOff": "Spegni Inverter", + "Restart": "Riavvia Inverter", + "Failure": "Fallito", + "Pending": "In Attesa", + "Ok": "Ok", + "Unknown": "Sconosciuto", + "ShowGridProfile": "Mostra Settaggi Inverter", + "GridProfile": "Settaggi Inverter", + "LoadingInverter": "In attesa dei dati... (puo' richiedere fino a 10 secondi)" + }, + "eventlog": { + "Start": "Inizio", + "Stop": "Fine", + "Id": "ID", + "Message": "Messaggio" + }, + "devinfo": { + "NoInfo": "Informazioni non disponibili", + "NoInfoLong": "Ancora nessuna informazione dall'inverter. Sto riprovando...", + "UnknownModel": "Modello sconosciuto! Per favore fornisci \"Hardware Part Number\" ed il modello (esempio HM-350) in una Issue su GitHub.", + "Serial": "Seriale", + "ProdYear": "Produzione Annua", + "ProdWeek": "Produzione Settimanale", + "Model": "Modello", + "DetectedMaxPower": "Rilevata potenza massima", + "BootloaderVersion": "Versione Bootloader", + "FirmwareVersion": "Versione Firmware", + "FirmwareBuildDate": "Data Firmware", + "HardwarePartNumber": "Hardware Part Number", + "HardwareVersion": "Hardware Version" + }, + "gridprofile": { + "NoInfo": "@:devinfo.NoInfo", + "NoInfoLong": "@:devinfo.NoInfoLong", + "Name": "Nome", + "Version": "Versione", + "Enabled": "@:wifistationinfo.Enabled", + "Disabled": "@:wifistationinfo.Disabled", + "GridprofileSupport": "Supporto sviluppatori", + "GridprofileSupportLong": "Clicca qui per ulteriori informazioni." + }, + "systeminfo": { + "SystemInfo": "Info Sistema", + "VersionError": "Errore ricezione della versione", + "VersionNew": "Nuova versione disponibile! Mostra aggiornamenti!", + "VersionOk": "Già aggiornato!" + }, + "firmwareinfo": { + "FirmwareInformation": "Info Firmware", + "Hostname": "Hostname", + "SdkVersion": "SDK Version", + "ConfigVersion": "Config Version", + "FirmwareVersion": "Firmware Version / Git Hash", + "PioEnv": "PIO Environment", + "FirmwareVersionHint": "Click here to show information about your current version", + "FirmwareUpdate": "Firmware Update", + "FirmwareUpdateHint": "Click here to view the changes between your version and the latest version", + "FrmwareUpdateAllow": "By activating the update check, a request is sent to GitHub.com each time the page is called up to retrieve the currently available version. If you do not agree with this, leave this function deactivated.", + "ResetReason0": "Reset Reason CPU 0", + "ResetReason1": "Reset Reason CPU 1", + "ConfigSaveCount": "Config save count", + "Uptime": "Uptime", + "UptimeValue": "0 days {time} | 1 day {time} | {count} days {time}" + }, + "hardwareinfo": { + "HardwareInformation": "Info Hardware", + "ChipModel": "Chip Model", + "ChipRevision": "Chip Revision", + "ChipCores": "Chip Cores", + "CpuFrequency": "CPU Frequency", + "Mhz": "MHz" + }, + "memoryinfo": { + "MemoryInformation": "Info Memoria", + "Type": "Tipo", + "Usage": "Uso", + "Free": "Libera", + "Used": "Usata", + "Size": "Dimensione", + "Heap": "Heap", + "PsRam": "PSRAM", + "LittleFs": "LittleFs", + "Sketch": "Sketch" + }, + "heapdetails": { + "HeapDetails": "Dettagli memoria Heap", + "TotalFree": "Libera totale", + "LargestFreeBlock": "Blocco contiguo libero più grande", + "MaxUsage": "Massima utilizzata dall'avvio", + "Fragmentation": "Livello frammentazione" + }, + "radioinfo": { + "RadioInformation": "Info Transceiver Radio", + "Status": "{module} Stato", + "ChipStatus": "{module} Chip Stato", + "ChipType": "{module} Chip Tipo", + "Connected": "connesso", + "NotConnected": "non connesso", + "Configured": "configurato", + "NotConfigured": "no configurato", + "Unknown": "Sconosciuto" + }, + "networkinfo": { + "NetworkInformation": "Informazioni Rete" + }, + "wifistationinfo": { + "WifiStationInfo": "Info WiFi (Station)", + "Status": "Stato", + "Enabled": "abilitato", + "Disabled": "disabilitato", + "Ssid": "SSID", + "Bssid": "BSSID", + "Quality": "Qualità", + "Rssi": "RSSI" + }, + "wifiapinfo": { + "WifiApInfo": "Info WiFi (Access Point)", + "Status": "@:wifistationinfo.Status", + "Enabled": "@:wifistationinfo.Enabled", + "Disabled": "@:wifistationinfo.Disabled", + "Ssid": "@:wifistationinfo.Ssid", + "Stations": "Numero Stazioni" + }, + "interfacenetworkinfo": { + "NetworkInterface": "Interfaccia di Rete ({iface})", + "Hostname": "@:firmwareinfo.Hostname", + "IpAddress": "Indirizzo IP", + "Netmask": "Netmask", + "DefaultGateway": "Gateway", + "Dns": "DNS {num}", + "MacAddress": "Indirizzo MAC" + }, + "interfaceapinfo": { + "NetworkInterface": "Interfaccia di Rete (Access Point)", + "IpAddress": "@:interfacenetworkinfo.IpAddress", + "MacAddress": "@:interfacenetworkinfo.MacAddress" + }, + "ntpinfo": { + "NtpInformation": "Informazioni NTP", + "ConfigurationSummary": "Riepilogo Configurazione", + "Server": "Server", + "Timezone": "Timezone", + "TimezoneDescription": "Descrizione Timezone", + "CurrentTime": "Data/Ora attuale", + "Status": "Stato", + "Synced": "sincronizzata", + "NotSynced": "non sincronizzata", + "LocalTime": "Ora Locale", + "Sunrise": "Alba", + "Sunset": "Tramonto", + "NotAvailable": "Non Disponibile", + "Mode": "Modalità", + "Day": "Giorno", + "Night": "Notte" + }, + "mqttinfo": { + "MqttInformation": "Informazioni MQTT", + "ConfigurationSummary": "@:ntpinfo.ConfigurationSummary", + "Status": "@:ntpinfo.Status", + "Enabled": "Abilitato", + "Disabled": "Disabilitato", + "Server": "@:ntpinfo.Server", + "Port": "Porta", + "Username": "Username", + "BaseTopic": "Topic Base", + "PublishInterval": "Intervallo Publish", + "Seconds": "{sec} secondi", + "CleanSession": "CleanSession", + "Retain": "Retain", + "Tls": "TLS", + "RootCertifcateInfo": "Info Certificato Root CA", + "TlsCertLogin": "Entra con Certificato TLS", + "ClientCertifcateInfo": "Info Certificato Client", + "HassSummary": "Riepilogo Configurazione Home Assistant MQTT Auto Discovery", + "Expire": "Scade", + "IndividualPanels": "Pannello Individuale", + "RuntimeSummary": "Riepilogo Runtime", + "ConnectionStatus": "Stato Connessione", + "Connected": "connesso", + "Disconnected": "disconnesso" + }, + "console": { + "Console": "Console", + "VirtualDebugConsole": "Virtual Debug Console", + "EnableAutoScroll": "Abilita AutoScroll", + "ClearConsole": "Pulisci Console", + "CopyToClipboard": "Copia nella clipboard" + }, + "inverterchannelinfo": { + "String": "Stringa {num}", + "Phase": "Fase {num}", + "General": "Generale" + }, + "invertertotalinfo": { + "TotalYieldTotal": "Totale Energia", + "TotalYieldDay": "Energia Giornaliera", + "TotalPower": "Potenza Totale" + }, + "inverterchannelproperty": { + "Power": "Potenza", + "Voltage": "Tensione", + "Current": "Corrente", + "Power DC": "PotenzaDC", + "YieldDay": "EnergiaOggi", + "YieldTotal": "EnergiaTotale", + "Frequency": "Frequenza", + "Temperature": "Temperatura", + "PowerFactor": "FattorePotenza", + "ReactivePower": "PotenzaReattiva", + "Efficiency": "Efficienza", + "Irradiation": "Irragiamento" + }, + "maintenancereboot": { + "DeviceReboot": "Riavvio DTU", + "PerformReboot": "Fai il riavvio", + "Reboot": "Riavvio!", + "Cancel": "@:base.Cancel", + "RebootOpenDTU": "Riavvio OpenDTU", + "RebootQuestion": "Vuoi veramente riavvia il DTU?", + "RebootHint": "Nota: Normalmente non serve riavviare OpenDTU, in quanto esegue automaticamente il ravvio quando necessario (ad esempio dopo aggiornamento firmware). Modifiche alla configurazione vengono apprese subito, senza richiedere riavvio. Se devi riavviare a causa di un errore, ti preghiamo di segnalarcelo cliccando su https://github.com/tbnobody/OpenDTU/issues." + }, + "dtuadmin": { + "DtuSettings": "Impostazioni DTU", + "DtuConfiguration": "Configurazione DTU", + "Serial": "Seriale:", + "SerialHint": "Sia il DTU che l'inverter hanno un numero seriale. Il numero seriale del DTU è generato casualmente al primo avvio e normalmente non serve modificarlo.", + "PollInterval": "Intervallo Interrogazione:", + "Seconds": "Secondi", + "NrfPaLevel": "Potenza Trasmettitore NRF24:", + "CmtPaLevel": "Potenza Trasmettitore CMT2300A:", + "NrfPaLevelHint": "Usato per inverter HM. Considera che aumentando la potenza aumentano il consumo di corrente.", + "CmtPaLevelHint": "Usato per inverter HMS/HMT. Considera che aumentando la potenza aumentano il consumo di corrente.", + "CmtCountry": "CMT2300A Zona/Paese:", + "CmtCountryHint": "Ogni zona ha una differente allocazione di frequenze utilizzabili.", + "country_0": "Europa ({min}MHz - {max}MHz)", + "country_1": "Nord America ({min}MHz - {max}MHz)", + "country_2": "Brasile ({min}MHz - {max}MHz)", + "CmtFrequency": "Frequenza CMT2300A:", + "CmtFrequencyHint": "Fai attenzione ad usare solo frequenze ammesse nel tuo Paese! Dopo la modifica frequenza, servono fino a 15 minuti affinché la connessione si ristabilisca.", + "CmtFrequencyWarning": "La frequenza selezionata è fuori dal range selezionato dal tuo Paese. Verifica che la frequenza selezionata non violi le normative del tuo Paese.", + "MHz": "{mhz} MHz", + "dBm": "{dbm} dBm", + "Min": "Minima ({db} dBm)", + "Low": "Bassa ({db} dBm)", + "High": "Alta ({db} dBm)", + "Max": "Massima ({db} dBm)" + }, + "securityadmin": { + "SecuritySettings": "Impostazioni di Sicurezza", + "AdminPassword": "Password Admin", + "Password": "Password:", + "RepeatPassword": "Ripeti Password:", + "PasswordHint": "Nota: La password di amministrazione viene utilizzata non solo per accedere a questa interfaccia web (con user 'admin'), ma anche per connettersi al dispositivo in modalità AP. Deve avere da 8 a 64 caratteri.", + "Permissions": "Permessi", + "ReadOnly": "Permetti accessi web in sola lettura senza richiedere la password" + }, + "ntpadmin": { + "NtpSettings": "Impostazioni NTP (Data / Ora)", + "NtpConfiguration": "Configurazione NTP", + "TimeServer": "Server NTP:", + "TimeServerHint": "Puoi lasciare il valore di default, nel caso in cui OpenDTU abbia accesso ad internet.", + "Timezone": "Timezone:", + "TimezoneConfig": "Timezone Config:", + "LocationConfiguration": "Configurazione Posizione", + "Longitude": "Longitudine", + "Latitude": "Latitudine", + "SunSetType": "Tipo di Alba", + "SunSetTypeHint": "Influenza il calcolo dell'ora di Alba/Tramonto. Dopo la conferma, è richiesto fino ad un minuto perché la modifica venga applicata.", + "OFFICIAL": "Standard dawn (90.8°)", + "NAUTICAL": "Nautical dawn (102°)", + "CIVIL": "Civil dawn (96°)", + "ASTONOMICAL": "Astronomical dawn (108°)", + "ManualTimeSynchronization": "Sincronizzazione Manuale Data/Ora", + "CurrentOpenDtuTime": "Ora OpenDTU attuale:", + "CurrentLocalTime": "Ora Locale attuale:", + "SynchronizeTime": "Sincronizza Data/Ora", + "SynchronizeTimeHint": "Nota: Puoi usare la sincronizzazione manuale per impostare Data/Ora nel caso che non sia disponibile un server NTP. In questo caso la data/ora viene persa in caso di mancata alimentazione. Inoltre, con la sincronizzazione manuale ci sarà una progressiva deriva della Data/Ora in quanto l'ESP32 non ha un Real Time Clock interno." + }, + "networkadmin": { + "NetworkSettings": "Impostazioni di Rete", + "WifiConfiguration": "Configurazione WiFi", + "WifiSsid": "WiFi SSID:", + "WifiPassword": "WiFi Password:", + "Hostname": "Hostname:", + "HostnameHint": "Nota: Il testo %06X sarà rimpiazzato con le ultime 6 cifre del ChipID dell'ESP32 in formato esadecimale.", + "EnableDhcp": "Abilita DHCP", + "StaticIpConfiguration": "Configurazione IP Statico", + "IpAddress": "Indirizzo IP:", + "Netmask": "Netmask:", + "DefaultGateway": "Default Gateway:", + "Dns": "DNS Server {num}:", + "AdminAp": "Configurazione WiFi (Admin AccessPoint)", + "ApTimeout": "Timeout AccessPoint:", + "ApTimeoutHint": "Tempo in cui la modalità AccessPoint rimarrà attiva. 0=per sempre.", + "Minutes": "minuti", + "EnableMdns": "Abilita mDNS", + "MdnsSettings": "Configurazione mDNS" + }, + "mqttadmin": { + "MqttSettings": "Impostazioni MQTT", + "MqttConfiguration": "Configurazione MQTT", + "EnableMqtt": "Abilita MQTT", + "EnableHass": "Abilita Home Assistant MQTT Auto Discovery", + "MqttBrokerParameter": "Parametri Broker MQTT", + "Hostname": "Hostname:", + "HostnameHint": "Hostname o Indirizzo IP", + "Port": "Porta:", + "Username": "Username:", + "UsernameHint": "Username, lascia vuoto per connessione anonima", + "Password": "Password:", + "PasswordHint": "Password, lascia vuota per connessione anonima", + "BaseTopic": "Topic Base:", + "BaseTopicHint": "Topic Base, prefisso da aggiungere (ad esempio inverter/)", + "PublishInterval": "Intervallo pubblicazione:", + "Seconds": "secondi", + "CleanSession": "Abilita CleanSession", + "EnableRetain": "Abilita Retain", + "EnableTls": "Abilita TLS", + "RootCa": "CA-Root-Certificate (default Letsencrypt):", + "TlsCertLoginEnable": "Abilita Login con certificato TLS", + "ClientCert": "TLS Client-Certificate:", + "ClientKey": "TLS Client-Key:", + "LwtParameters": "Parametri LWT", + "LwtTopic": "Topic LWT:", + "LwtTopicHint": "Topic LWT, da aggiungere al Topic Base", + "LwtOnline": "Messaggio 'Online0 LWT:", + "LwtOnlineHint": "Messaggio pubblicato quando online", + "LwtOffline": "Messaggio 'Offline' LWT:", + "LwtOfflineHint": "Messaggio che sarà pubblicato quando offline", + "LwtQos": "QoS (Quality of Service):", + "QOS0": "0 (Al massimo una volta)", + "QOS1": "1 (Almeno una volta)", + "QOS2": "2 (Esattamente una volta)", + "HassParameters": "Parametri Home Assistant MQTT Auto Discovery", + "HassPrefixTopic": "Prefisso Topic:", + "HassPrefixTopicHint": "Prefisso per Topic autodiscovery", + "HassRetain": "Abilita Retain", + "HassExpire": "Abilita Scadenza", + "HassIndividual": "Pannelli Individuale" + }, + "inverteradmin": { + "InverterSettings": "Impostazioni Inverter", + "AddInverter": "Aggiungi nuovo Inverter", + "Serial": "Seriale", + "Name": "Nome", + "Add": "Aggiungi", + "AddHint": "Nota: Potrai aggiungere ulteriori parametri dopo aver creato l'inverter, cliccando sull'icona 'Matita' nella lista inverter.", + "InverterList": "Lista Inverter", + "Status": "Stato", + "Send": "Invia", + "Receive": "Riceve", + "StatusHint": "Nota: L'inverter viene alimentato dal fotovoltaico. Durante la notte, l'inverter risulterà spento. Le richieste potranno comunque essere trasmesse.", + "Type": "Tipo", + "Action": "Azione", + "SaveOrder": "Salva ordine", + "DeleteInverter": "Rimuovi inverter", + "EditInverter": "Modifica inverter", + "General": "Generale", + "String": "Stringa", + "Advanced": "Avanzate", + "InverterSerial": "Seriale Inverter:", + "InverterName": "Nome Inverter:", + "InverterNameHint": "Puoi specificare un nome qualsiasi da assegnare all'inverter.", + "InverterStatus": "Riceve / Invia", + "PollEnable": "Interroga inverter", + "PollEnableNight": "Interroga inverter di notte", + "CommandEnable": "Invia comandi", + "CommandEnableNight": "Invia comandi di notte", + "StringName": "Nome stringa {num}:", + "StringNameHint": "Qui puoi specificare un nome qualsiasi per la porta dell'inverter o per il pannello fotovoltaico collegato.", + "StringMaxPower": "Massima potenza stringa {num}:", + "StringMaxPowerHint": "Inserisci la potenza massima associata ai panelli fotovoltaici collegati a questa stringa.", + "StringYtOffset": "Offset Energia totale per la stringa {num}:", + "StringYtOffsetHint": "Questo offset viene utilizzato per azzerare il contatore qualora venga usato un inverter usato.", + "InverterHint": "*) Inserisci la potenza Wp dei pannelli fotovoltaici collegati alla stringa: servirà per calcolare l'irragiamento.", + "ReachableThreshold": "Reachable Threshold:", + "ReachableThresholdHint": "Definisce il numero di richieste fallite prima che l'inverter sia considerato irraggiungibile.", + "ZeroRuntime": "Azzera dati in tempo reale", + "ZeroRuntimeHint": "Azzera i dati in tempo reale (tranne l'Energia) se l'inverter diventa irraggiunbile.", + "ZeroDay": "Azzera dati energia alla mezzanotte", + "ZeroDayHint": "Questo vale se l'inverter risulta irraggiungibile. Se l'inverter risponde anche di notte, verranno mostrati i suoi valori. (Il Reset si verifica al riavvio)", + "Cancel": "@:base.Cancel", + "Save": "@:base.Save", + "DeleteMsg": "Sicuro di voler rimuovere l'inverter \"{name}\" con numero seriale {serial}?", + "Delete": "Rimuovi", + "YieldDayCorrection": "Correzione energia giornaliera", + "YieldDayCorrectionHint": "Aggiungi questo valore all'energia giornaliera se l'inverter è stato riavviato. Questo valore sarò resettato a mezzanotte" + }, + "configadmin": { + "ConfigManagement": "Configurazione Gestione", + "BackupHeader": "Backup: Configurazione File Backup", + "BackupConfig": "Esegui il backup del file:", + "Backup": "Backup", + "Restore": "Ripristina", + "NoFileSelected": "Nessun file selezionato", + "RestoreHeader": "Ripristina: Ripristina File Configurazione", + "Back": "Indietro", + "UploadSuccess": "Invio File con successo", + "RestoreHint": "Nota: questa operazione rimpiazza la configurazione con quella contenuta nel file, e poi riavvia automaticamente OpenDTU per applicare la nuova configurazione.", + "ResetHeader": "Inizializza: Esegui il Factory Reset", + "FactoryResetButton": "Ripristina Configurazione Factory-Default", + "ResetHint": "Nota: Clicca 'Ripristina Configurazione Factory-Default' per stabilire le impostazioni di fabbrica e riavviare automaticamente OpenDTU.", + "FactoryReset": "Factory Reset", + "ResetMsg": "Sei sicuro di voler cancellare la configurazione attuale e applicare la configurazione di fabbrica?", + "ResetConfirm": "Factory Reset!", + "Cancel": "@:base.Cancel" + }, + "login": { + "Login": "Login", + "SystemLogin": "System Login", + "Username": "Username", + "UsernameRequired": "Inserisci Username", + "Password": "Password", + "PasswordRequired": "Inserisci Password", + "LoginButton": "Login" + }, + "firmwareupgrade": { + "FirmwareUpgrade": "Aggiornamento Firmware", + "Loading": "@:base.Loading", + "OtaError": "Errore aggiornamento OTA", + "Back": "Indietro", + "Retry": "Riprova", + "OtaStatus": "Stato OTA", + "OtaSuccess": "Aggiornamento firmware eseguito con successo. Il dispositivo si riavvierà automaticamente. Quando sarà nuovamente disponibile, l'interfacca sarà ricaricata automaticamente.", + "FirmwareUpload": "Invia Firmware", + "UploadProgress": "Upload in corso" + }, + "about": { + "AboutOpendtu": "About OpenDTU", + "Documentation": "Documentazione", + "DocumentationBody": "La documentazione firmware e hardware sono disponibili qui: https://www.opendtu.solar", + "ProjectOrigin": "Origine Progetto", + "ProjectOriginBody1": "Questo progetto è partito da questa discussione. (Mikrocontroller.net)", + "ProjectOriginBody2": "Il protocollo Hoymiles è stato decriptato grazie al contributo volontario di molti programmatori. OpenDTU, fra gli altri, è stato sviluppato grazie a questo lavoro. Il progetto è distribuito con Licenza Open Source (GNU General Public License version 2).", + "ProjectOriginBody3": "Il software è stato sviluppato con le nostre migliori conoscenze e convinzioni. Tuttavia, non si assume alcuna responsabilità per malfunzionamenti o perdita di garanzia dell'inverter.", + "ProjectOriginBody4": "OpenDTU è disponibile gratuitamente. Se hai pagato per questo software, probabilmente sei stato truffato.", + "NewsUpdates": "Novità e Aggiornamenti", + "NewsUpdatesBody": "Nuovi aggiornamenti sono disponibili su Github: https://github.com/tbnobody/OpenDTU", + "ErrorReporting": "Segnalazione Errori", + "ErrorReportingBody": "Per favore segnala eventuali problemi utilizzando le funzionalità della piattaforma Github", + "Discussion": "Discussioni", + "DiscussionBody": "Puoi avviare una discussione con noi su Discord o Github" + }, + "hints": { + "RadioProblem": "Non è possibile dialogare con il modulo radio selezionato. Controlla i collegamenti alla radio.", + "TimeSync": "La Data/Ora non sono state sincronizzate, ed in tal caso non è possibile eseguire richieste all'inverter. Questa condizione è normale appena avviato, tuttavia dopo un po' (>1 minuto), questa situazione potrebbe indicare un problema di accesso al server NTP.", + "TimeSyncLink": "Controlla le impostazioni Data/Ora.", + "DefaultPassword": "Stai usando la password di default per accedere all'interfaccia web e per la modalità Access Point di emergenza. Questo può portare ad un rischio di sicurezza.", + "DefaultPasswordLink": "Per favore cambia la password." + }, + "deviceadmin": { + "DeviceManager": "Device-Manager", + "ParseError": "Parse error in 'pin_mapping.json': {error}", + "PinAssignment": "Impostazioni Connessione", + "SelectedProfile": "Profilo selezionato:", + "DefaultProfile": "(Impostazioni di Default)", + "ProfileHint": "Il tuo dispositivo potrebbe smettere di rispondere selezionando un profilo incompatibile. In questo caso, dovrai eseguire una cancellazione collegandoti all'interfaccia seriale.", + "Display": "Display", + "PowerSafe": "Abilita Risparmio Energetico:", + "PowerSafeHint": "Spegni il display se l'inverter non produce.", + "Screensaver": "Abilita Screensaver:", + "ScreensaverHint": "Muove il testo nel display per prevenire danneggiamento pixel. (Utile in caso di display OLED)", + "DiagramMode": "Modalità grafica:", + "off": "Off", + "small": "Small", + "fullscreen": "Fullscreen", + "DiagramDuration": "Durata grafico:", + "DiagramDurationHint": "Periodo che viene mostrato nel grafico.", + "Seconds": "Secondi", + "Contrast": "Contrasto ({contrast}):", + "Rotation": "Rotazione:", + "rot0": "Nessuna rotazione", + "rot90": "Rotazione 90 gradi", + "rot180": "Rotazione 180 gradi", + "rot270": "Rotazione 270 gradi", + "DisplayLanguage": "Linuga Display:", + "en": "English", + "de": "German", + "fr": "French", + "it": "Italian", + "Leds": "LEDs", + "EqualBrightness": "Equalizza luminosità:", + "LedBrightness": "LED {led}, Luminosità ({brightness}):" + }, + "pininfo": { + "PinOverview": "Panoramica della Connessione", + "Category": "Categoria", + "Name": "Nome", + "Number": "Numero", + "ValueSelected": "Selezionato", + "ValueActive": "Attivo" + } +}