diff --git a/scripts/convertHtml.py b/scripts/convertHtml.py index ec16b5f34..ea8ef0da6 100644 --- a/scripts/convertHtml.py +++ b/scripts/convertHtml.py @@ -232,6 +232,8 @@ def main(): lang = "en" if env['PIOENV'][-3:] == "-de": lang = "de" + if env['PIOENV'][-3:] == "-fr": + lang = "fr" # go throw the array diff --git a/src/platformio.ini b/src/platformio.ini index e9e634652..62507b0b2 100644 --- a/src/platformio.ini +++ b/src/platformio.ini @@ -67,6 +67,20 @@ build_flags = ${env.build_flags} monitor_filters = esp8266_exception_decoder +[env:esp8266-fr] +platform = espressif8266 +board = esp12e +board_build.f_cpu = 80000000L +build_flags = ${env.build_flags} + -DEMC_MIN_FREE_MEMORY=4096 + -DLANG_FR + -DENABLE_MQTT + -DPLUGIN_DISPLAY + -DENABLE_HISTORY + ;-Wl,-Map,output.map +monitor_filters = + esp8266_exception_decoder + [env:esp8266-prometheus] platform = espressif8266 board = esp12e @@ -104,8 +118,6 @@ build_flags = ${env.build_flags} monitor_filters = esp8266_exception_decoder - - [env:esp8285] platform = espressif8266 board = esp8285 @@ -164,6 +176,18 @@ build_flags = ${env.build_flags} monitor_filters = esp32_exception_decoder +[env:esp32-wroom32-fr] +platform = espressif32@6.5.0 +board = lolin_d32 +build_flags = ${env.build_flags} + -DUSE_HSPI_FOR_EPD + -DENABLE_MQTT + -DPLUGIN_DISPLAY + -DENABLE_HISTORY + -DLANG_FR +monitor_filters = + esp32_exception_decoder + [env:esp32-wroom32-prometheus] platform = espressif32@6.5.0 board = lolin_d32 diff --git a/src/plugins/Display/Display.h b/src/plugins/Display/Display.h index b2c88b058..e263d6671 100644 --- a/src/plugins/Display/Display.h +++ b/src/plugins/Display/Display.h @@ -9,6 +9,7 @@ #include "../../hm/hmSystem.h" #include "../../hm/hmRadio.h" #include "../../utils/helper.h" +#include "../plugin_lang.h" #include "Display_Mono.h" #include "Display_Mono_128X32.h" #include "Display_Mono_128X64.h" diff --git a/src/plugins/Display/Display_Mono_128X64.h b/src/plugins/Display/Display_Mono_128X64.h index c63f0b220..c93c5c1a2 100644 --- a/src/plugins/Display/Display_Mono_128X64.h +++ b/src/plugins/Display/Display_Mono_128X64.h @@ -93,7 +93,7 @@ class DisplayMono128X64 : public DisplayMono { // print Date and time if (0 != mDisplayData->utcTs) - printText(ah::getDateTimeStrShort(mDisplayData->utcTs).c_str(), l_Time, 0xff); + printText(ah::getDateTimeStrShort_i18n(mDisplayData->utcTs).c_str(), l_Time, 0xff); if (showLine(l_Status)) { // alternatively: @@ -108,7 +108,7 @@ class DisplayMono128X64 : public DisplayMono { int8_t moon_pos = -1; setLineFont(l_Status); if (0 == mDisplayData->nrSleeping + mDisplayData->nrProducing) - snprintf(mFmtText, DISP_FMT_TEXT_LEN, "no inverter"); + snprintf(mFmtText, DISP_FMT_TEXT_LEN, STR_NO_INVERTER); else if (0 == mDisplayData->nrSleeping) { snprintf(mFmtText, DISP_FMT_TEXT_LEN, " "); sun_pos = 0; @@ -145,7 +145,7 @@ class DisplayMono128X64 : public DisplayMono { printText(mFmtText, l_TotalPower, 0xff); } else { - printText("offline", l_TotalPower, 0xff); + printText(STR_OFFLINE, l_TotalPower, 0xff); } } diff --git a/src/plugins/Display/Display_Mono_84X48.h b/src/plugins/Display/Display_Mono_84X48.h index b5daacd56..6c7d11247 100644 --- a/src/plugins/Display/Display_Mono_84X48.h +++ b/src/plugins/Display/Display_Mono_84X48.h @@ -78,7 +78,7 @@ class DisplayMono84X48 : public DisplayMono { // print Date and time if (0 != mDisplayData->utcTs) - printText(ah::getDateTimeStrShort(mDisplayData->utcTs).c_str(), l_Time, 0xff); + printText(ah::getDateTimeStrShort_i18n(mDisplayData->utcTs).c_str(), l_Time, 0xff); if (showLine(l_Status)) { // alternatively: @@ -90,7 +90,7 @@ class DisplayMono84X48 : public DisplayMono { // print status of inverters else { if (0 == mDisplayData->nrSleeping + mDisplayData->nrProducing) - snprintf(mFmtText, DISP_FMT_TEXT_LEN, "no inverter"); + snprintf(mFmtText, DISP_FMT_TEXT_LEN, STR_NO_INVERTER); else if (0 == mDisplayData->nrSleeping) snprintf(mFmtText, DISP_FMT_TEXT_LEN, "\x86"); // sun symbol else if (0 == mDisplayData->nrProducing) @@ -111,7 +111,7 @@ class DisplayMono84X48 : public DisplayMono { printText(mFmtText, l_TotalPower, 0xff); } else { - printText("offline", l_TotalPower, 0xff); + printText(STR_OFFLINE, l_TotalPower, 0xff); } } diff --git a/src/plugins/plugin_lang.h b/src/plugins/plugin_lang.h new file mode 100644 index 000000000..30bea5439 --- /dev/null +++ b/src/plugins/plugin_lang.h @@ -0,0 +1,26 @@ +//----------------------------------------------------------------------------- +// 2024 Ahoy, https://ahoydtu.de +// Creative Commons - http://creativecommons.org/licenses/by-nc-sa/4.0/deed +//----------------------------------------------------------------------------- + +#ifndef __PLUGIN_LANG_H__ +#define __PLUGIN_LANG_H__ + +#ifdef LANG_DE + #define STR_MONTHNAME_3_CHAR_LIST "ErrJanFebMrzAprMaiJunJulAugSepOktNovDez" + #define STR_DAYNAME_3_CHAR_LIST "ErrSonMonDieMitDonFreSam" + #define STR_OFFLINE "aus" + #define STR_NO_INVERTER "kein inverter" +#elif LANG_FR + #define STR_MONTHNAME_3_CHAR_LIST "ErrJanFevMarAvrMaiJunJulAouSepOctNovDec" + #define STR_DAYNAME_3_CHAR_LIST "ErrDimLunMarMerJeuVenSam" + #define STR_OFFLINE "eteint" + #define STR_NO_INVERTER "pas d'onduleur" +#else + #define STR_MONTHNAME_3_CHAR_LIST "ErrJanFebMarAprMayJunJulAugSepOctNovDec" + #define STR_DAYNAME_3_CHAR_LIST "ErrSunMonTueWedThuFriSat" + #define STR_OFFLINE "offline" + #define STR_NO_INVERTER "no inverter" +#endif + +#endif /*__PLUGIN_LANG_H__*/ \ No newline at end of file diff --git a/src/utils/helper.cpp b/src/utils/helper.cpp index 24a4d9ee2..d5612e56d 100644 --- a/src/utils/helper.cpp +++ b/src/utils/helper.cpp @@ -5,6 +5,7 @@ #include "helper.h" #include "dbg.h" +#include "../plugins/plugin_lang.h" namespace ah { void ip2Arr(uint8_t ip[], const char *ipStr) { @@ -82,6 +83,37 @@ namespace ah { return String(str); } + #define dt_SHORT_STR_LEN_i18n 3 // the length of short strings + static char buffer[dt_SHORT_STR_LEN_i18n + 1]; // must be big enough for longest string and the terminating null + const char monthShortNames_P[] PROGMEM = STR_MONTHNAME_3_CHAR_LIST; + const char dayShortNames_P[] PROGMEM = STR_DAYNAME_3_CHAR_LIST; + char* monthShortStr_i18n(uint8_t month) + { + for (int i=0; i < dt_SHORT_STR_LEN_i18n; i++) + buffer[i] = pgm_read_byte(&(monthShortNames_P[i + month * dt_SHORT_STR_LEN_i18n])); + buffer[dt_SHORT_STR_LEN_i18n] = 0; + return buffer; + } + + char* dayShortStr_i18n(uint8_t day) + { + for (int i=0; i < dt_SHORT_STR_LEN_i18n; i++) + buffer[i] = pgm_read_byte(&(dayShortNames_P[i + day * dt_SHORT_STR_LEN_i18n])); + buffer[dt_SHORT_STR_LEN_i18n] = 0; + return buffer; + } + + String getDateTimeStrShort_i18n(time_t t) { + char str[20]; + if(0 == t) + sprintf(str, "n/a"); + else { + sprintf(str, "%3s ", dayShortStr_i18n(dayOfWeek(t))); + sprintf(str+4, "%2d.%3s %02d:%02d", day(t), monthShortStr_i18n(month(t)), hour(t), minute(t)); + } + return String(str); + } + uint64_t Serial2u64(const char *val) { char tmp[3]; uint64_t ret = 0ULL; diff --git a/src/utils/helper.h b/src/utils/helper.h index 1dbba3d91..80a63f412 100644 --- a/src/utils/helper.h +++ b/src/utils/helper.h @@ -42,6 +42,7 @@ namespace ah { double round3(double value); String getDateTimeStr(time_t t); String getDateTimeStrShort(time_t t); + String getDateTimeStrShort_i18n(time_t t); String getDateTimeStrFile(time_t t); String getTimeStr(time_t t); String getTimeStrMs(uint64_t t); diff --git a/src/web/lang.h b/src/web/lang.h index fb5506ee6..2afde61f2 100644 --- a/src/web/lang.h +++ b/src/web/lang.h @@ -8,68 +8,91 @@ #ifdef LANG_DE #define REBOOT_ESP_APPLY_CHANGES "starte AhoyDTU neu, um die Änderungen zu speichern" -#else /*LANG_EN*/ +#elif LANG_FR + #define REBOOT_ESP_APPLY_CHANGES "redémarrer AhoyDTU pour appliquer tous vos changements de configuration" +#else #define REBOOT_ESP_APPLY_CHANGES "reboot AhoyDTU to apply all your configuration changes" #endif #ifdef LANG_DE #define TIME_NOT_SET "keine gültige Zeit, daher keine Kommunikation zum Wechselrichter möglich" -#else /*LANG_EN*/ +#elif LANG_FR + #define TIME_NOT_SET "heure non définie. Aucune communication avec l'onduleur possible" +#else #define TIME_NOT_SET "time not set. No communication to inverter possible" #endif #ifdef LANG_DE #define WAS_IN_CH_12_TO_14 "Der ESP war in WLAN Kanal 12 bis 14, was uU. zu Abstürzen führt" -#else /*LANG_EN*/ +#elif LANG_FR + #define WAS_IN_CH_12_TO_14 "Votre ESP était sur les canaux wifi 12 à 14. Cela peut entraîner des redémarrages de votre AhoyDTU" +#else #define WAS_IN_CH_12_TO_14 "Your ESP was in wifi channel 12 to 14. It may cause reboots of your AhoyDTU" #endif #ifdef LANG_DE #define PATH_NOT_FOUND "Pfad nicht gefunden: " -#else /*LANG_EN*/ +#elif LANG_FR + #define PATH_NOT_FOUND "Chemin introuvable : " +#else #define PATH_NOT_FOUND "Path not found: " #endif #ifdef LANG_DE #define INCOMPLETE_INPUT "Unvollständige Eingabe" -#else /*LANG_EN*/ +#elif LANG_FR + #define INCOMPLETE_INPUT "Saisie incomplète" +#else #define INCOMPLETE_INPUT "Incomplete input" #endif #ifdef LANG_DE #define INVALID_INPUT "Ungültige Eingabe" -#else /*LANG_EN*/ +#elif LANG_FR + #define INVALID_INPUT "Saisie invalide" +#else #define INVALID_INPUT "Invalid input" #endif #ifdef LANG_DE #define NOT_ENOUGH_MEM "nicht genügend Speicher" -#else /*LANG_EN*/ +#elif LANG_FR + #define NOT_ENOUGH_MEM "Mémoire insuffisante" +#else #define NOT_ENOUGH_MEM "Not enough memory" #endif #ifdef LANG_DE #define DESER_FAILED "Deserialisierung fehlgeschlagen" -#else /*LANG_EN*/ +#elif LANG_FR + #define DESER_FAILED "Échec de la désérialisation" +#else #define DESER_FAILED "Deserialization failed" #endif #ifdef LANG_DE #define INV_NOT_FOUND "Wechselrichter nicht gefunden!" -#else /*LANG_EN*/ +#elif LANG_FR + #define INV_NOT_FOUND "onduleur non trouvé !" +#else #define INV_NOT_FOUND "inverter not found!" #endif #ifdef LANG_DE #define FACTORY_RESET "Ahoy auf Werkseinstellungen zurücksetzen" -#else /*LANG_EN*/ +#elif LANG_FR + #define FACTORY_RESET "Réinitialisation d'usine d'Ahoy" +#else #define FACTORY_RESET "Ahoy Factory Reset" #endif #ifdef LANG_DE #define BTN_REBOOT "Ahoy neustarten" -#else /*LANG_EN*/ +#elif LANG_FR + #define BTN_REBOOT "Redémarrer" +#else #define BTN_REBOOT "Reboot" #endif #endif /*__LANG_H__*/ + diff --git a/src/web/lang.json b/src/web/lang.json index 67b08b75b..c56910152 100644 --- a/src/web/lang.json +++ b/src/web/lang.json @@ -6,42 +6,50 @@ { "token": "NAV_WIZARD", "en": "Setup Wizard", - "de": "Daten" + "de": "Daten", + "fr": "Assistant de configuration" }, { "token": "NAV_LIVE", "en": "Live", - "de": "Daten" + "de": "Daten", + "fr": "En direct" }, { "token": "NAV_HISTORY", "en": "History", - "de": "Verlauf" + "de": "Verlauf", + "fr": "Historique" }, { "token": "NAV_WEBSERIAL", "en": "Webserial", - "de": "Web Konsole" + "de": "Web Konsole", + "fr": "Web Série" }, { "token": "NAV_SETTINGS", "en": "Settings", - "de": "Einstellungen" + "de": "Einstellungen", + "fr": "Paramètres" }, { "token": "NAV_DOCUMENTATION", "en": "Documentation", - "de": "Dokumentation" + "de": "Dokumentation", + "fr": "Documentation" }, { "token": "NAV_SAVE", "en": "save", - "de": "speichern" + "de": "speichern", + "fr": "Enregistrer" }, { "token": "NAV_ABOUT", "en": "About", - "de": "Über" + "de": "Über", + "fr": "à propos" } ] }, @@ -51,67 +59,80 @@ { "token": "WELCOME", "en": "Welcome to AhoyDTU", - "de": "Willkommen bei AhoyDTU" + "de": "Willkommen bei AhoyDTU", + "fr": "Bienvenue sur AhoyDTU" }, { "token": "NETWORK_SETUP", "en": "Network Setup", - "de": "Netzwerkeinstellung" + "de": "Netzwerkeinstellung", + "fr": "Configuration du réseau" }, { "token": "CHOOSE_WIFI", "en": "Choose your WiFi Network", - "de": "Wähle dein WiFi Netzwerk aus" + "de": "Wähle dein WiFi Netzwerk aus", + "fr": "Choisissez votre réseau WiFi" }, { "token": "WIFI_MANUAL", "en": "... or name it manually", - "de": "... oder nenne es hier" + "de": "... oder nenne es hier", + "fr": "... ou nommez-le manuellement" }, { "token": "WIFI_PASSWORD", "en": "WiFi Password", - "de": "WiFi Passwort" + "de": "WiFi Passwort", + "fr": "Mot de passe WiFi" }, { "token": "STOP_WIZARD", "en": "stop wizard", - "de": "Einrichtung beenden" + "de": "Einrichtung beenden", + "fr": "Arrêter l'assistant" }, { "token": "BTN_NEXT", "en": "next >>", - "de": "prüfen >>" + "de": "prüfen >>", + "fr": "suivant >>" }, { "token": "TEST_CONNECTION", "en": "Test Connection", - "de": "Verbindung wird überprüft" + "de": "Verbindung wird überprüft", + "fr": "Tester la connexion" }, { "token": "TRY_TO_CONNECT", "en": "AhoyDTU is trying to connect to your WiFi", - "de": "AhoyDTU versucht eine Verindung mit deinem Netzwerk herzustellen" + "de": "AhoyDTU versucht eine Verindung mit deinem Netzwerk herzustellen", + "fr": "AhoyDTU essaie de se connecter à votre WiFi" }, { "token": "CONNECTING", "en": "connecting ...", - "de": "verbinde ..." + "de": "verbinde ...", + "fr": "connexion en cours ..." }, { "token": "NETWORK_SUCCESS", "en": "success, got following IP in your network: ", - "de": "Verindung erfolgreich. AhoyDTU hat die folgende IP bekommen: " + "de": "Verbindung erfolgreich. AhoyDTU hat die folgende IP bekommen: ", + "fr": "succès, voici l'adresse IP obtenue dans votre réseau : " }, { "token": "BTN_FINISH", "en": "Finish >>", - "de": "Fertig >>" + "de": "Fertig >>", + "fr": "Terminer >>" }, { "token": "NUM_NETWORKS_FOUND", "en": "Network(s) found", - "de": "Netzwerk(e) gefunden" + "de": "Netzwerk(e) gefunden", + "fr": "Réseau(x) trouvé(s)" } ] }, @@ -121,652 +142,782 @@ { "token": "SETTINGS", "en": "Settings", - "de": "Einstellungen" + "de": "Einstellungen", + "fr": "Paramètres" }, { "token": "SYSTEM_CONFIG", "en": "System Config", - "de": "Systemkonfiguration" + "de": "Systemkonfiguration", + "fr": "Configuration du système" }, { "token": "DEVICE_NAME", "en": "Device Host Name", - "de": "Name der DTU" + "de": "Name der DTU", + "fr": "Nom de l'hôte du périphérique" }, { "token": "REBOOT_AT_MIDNIGHT", "en": "Reboot Ahoy at midnight", - "de": "mitternachts neu starten" + "de": "mitternachts neu starten", + "fr": "Redémarrage Ahoy à minuit" }, { "token": "DARK_MODE", "en": "Dark Mode", - "de": "dunkler Modus" + "de": "dunkler Modus", + "fr": "Mode Sombre" }, { "token": "DARK_MODE_NOTE", "en": "(empty browser cache or use CTRL + F5 after reboot to apply this setting)", - "de": "(der Browser-Cache muss geleert oder STRG + F5 gedrückt werden, um diese Einstellung zu aktivieren)" + "de": "(der Browser-Cache muss geleert oder STRG + F5 gedrückt werden, um diese Einstellung zu aktivieren)", + "fr": "(vider le cache du navigateur ou utiliser CTRL + F5 après le redémarrage pour appliquer ce paramètre)" }, { "token": "REGION", "en": "Region", - "de": "Region" + "de": "Region", + "fr": "Région" }, { "token": "TIMEZONE", "en": "Timezone", - "de": "Zeitzone" + "de": "Zeitzone", + "fr": "Fuseau horaire" }, { "token": "CUSTOM_LINK", "en": "Custom link (leave empty to hide element in navigation)", - "de": "benutzerspezifischer Link (leer lassen, um Element in Navigation auszublenden)" + "de": "benutzerspezifischer Link (leer lassen, um Element in Navigation auszublenden)", + "fr": "Lien personnalisé (laissez vide pour masquer l'élément dans la navigation)" }, { "token": "CUSTOM_LINK_TEXT", "en": "Custom link Text", - "de": "Beschriftung des Links" + "de": "Beschriftung des Links", + "fr": "Texte du lien personnalisé" }, { "token": "PINOUT_CONFIG", "en": "Pinout Configuration", - "de": "Anschlusseinstellungen" + "de": "Anschlusseinstellungen", + "fr": "Configuration des broches" }, { "token": "RADIO", "en": "Radio", - "de": "Funkmodul" + "de": "Funkmodul", + "fr": "Radio" }, { "token": "SERIAL_CONSOLE", "en": "Serial console", - "de": "Serielle Konsole" + "de": "Serielle Konsole", + "fr": "Console Série" }, { "token": "LOG_PRINT_INVERTER_DATA", "en": "print inverter data", - "de": "Livedaten ausgeben" + "de": "Livedaten ausgeben", + "fr": "Afficher les données de l'onduleur" }, { "token": "LOG_SERIAL_DEBUG", "en": "Serial Debug", - "de": "Entwicklerinformationen ausgeben" + "de": "Entwicklerinformationen ausgeben", + "fr": "Débogage Série" }, { "token": "LOG_PRIVACY_MODE", "en": "Privacy Mode", - "de": "Privatsphärenmodus" + "de": "Privatsphärenmodus", + "fr": "Mode de Confidentialité" }, { "token": "LOG_PRINT_TRACES", "en": "Print whole traces in Log", - "de": "alle Informationen in Log schreiben" + "de": "alle Informationen in Log schreiben", + "fr": "Imprimer toutes les traces dans le journal" }, { "token": "LOG_TO_MQTT", "en": "Send Serial debug over MqTT", - "de": "sende serielles Log über MqTT" + "de": "sende serielles Log über MqTT", + "fr": "Envoyer le débogage série sur MqTT" }, { "token": "NETWORK", "en": "Network", - "de": "Netzwerk" + "de": "Netzwerk", + "fr": "Réseau" }, { "token": "AP_PWD", "en": "AP Password (min. length: 8)", - "de": "AP Passwort (min. Länge: 8 Zeichen)" + "de": "AP Passwort (min. Länge: 8 Zeichen)", + "fr": "Mot de passe AP (longueur minimale : 8)" }, { "token": "SEARCH_NETWORKS", "en": "Search Networks", - "de": "Netzwerke suchen" + "de": "Netzwerke suchen", + "fr": "Rechercher des réseaux" }, { "token": "BTN_SCAN", "en": "scan", - "de": "Suche starten" + "de": "Suche starten", + "fr": "balayer" }, { "token": "AVAIL_NETWORKS", "en": "Avail Networks", - "de": "Verfügbare Netzwerke" + "de": "Verfügbare Netzwerke", + "fr": "Réseaux disponibles" }, { "token": "NETWORK_NOT_SCANNED", "en": "not scanned", - "de": "nicht gesucht" + "de": "nicht gesucht", + "fr": "non scanné" }, { "token": "SSID_HIDDEN", "en": "SSID is hidden", - "de": "SSID ist versteckt" + "de": "SSID ist versteckt", + "fr": "SSID est cachée" }, { "token": "PASSWORD", "en": "Password", - "de": "Passwort" + "de": "Passwort", + "fr": "Mot de passe" }, { "token": "STATIC_IP", "en": "Static IP (optional)", - "de": "Statische IP (optional)" + "de": "Statische IP (optional)", + "fr": "IP statique (optionnel)" }, { "token": "NETWORK_HINT_BLANK", "en": "Leave fields blank for DHCP
The following fields are parsed in this format: 192.168.4.1", - "de": "Felder leer lassen um in den DHCP Modus zu wechseln.
Das Format der IP Adressen ist: 192.168.4.1" + "de": "Felder leer lassen um in den DHCP Modus zu wechseln.
Das Format der IP Adressen ist: 192.168.4.1", + "fr": "Laissez les champs vides pour le DHCP
Les champs suivants sont analysés dans ce format : 192.168.4.1" }, { "token": "IP_ADDRESS", "en": "IP Address", - "de": "IP Adresse" + "de": "IP Adresse", + "fr": "Adresse IP" }, { "token": "SUBMASK", "en": "Submask", - "de": "Subnetzmaske" + "de": "Subnetzmaske", + "fr": "Masque de sous-réseau" }, { "token": "PROTECTION", "en": "Protection", - "de": "Zugriffsschutz" + "de": "Zugriffsschutz", + "fr": "Protection" }, { "token": "ADMIN_PASSWORD", "en": "Admin Password", - "de": "Administratorpasswort" + "de": "Administratorpasswort", + "fr": "Mot de passe administrateur" }, { "token": "PROTECTION_NOTE", "en": "Select pages which should be protected by password", - "de": "Auswählen, welche Bereiche passwortgeschützt werden sollen" + "de": "Auswählen, welche Bereiche passwortgeschützt werden sollen", + "fr": "Sélectionnez les pages qui doivent être protégées par mot de passe" }, { "token": "INVERTER", "en": "Inverter", - "de": "Wechselrichter" + "de": "Wechselrichter", + "fr": "Onduleur" }, { "token": "INTERVAL", "en": "Interval", - "de": "Intervall" + "de": "Intervall", + "fr": "Intervalle" }, { "token": "INV_RESET_MIDNIGHT", "en": "Reset values and YieldDay at midnight", - "de": "Werte und Gesamtertrag um Mitternacht zurücksetzen" + "de": "Werte und Gesamtertrag um Mitternacht zurücksetzen", + "fr": "Réinitialiser les valeurs et le rendement quotidien à minuit" }, { "token": "INV_PAUSE_SUNSET", "en": "Reset values at sunset", - "de": "Werte bei Sonnenuntergang zurücksetzen" + "de": "Werte bei Sonnenuntergang zurücksetzen", + "fr": "Réinitialiser les valeurs au coucher du soleil" }, { "token": "INV_RESET_NOT_AVAIL", "en": "Reset values when inverter status is 'not available'", - "de": "Werte zurücksetzen, sobald der Wechselrichter nicht erreichbar ist" + "de": "Werte zurücksetzen, sobald der Wechselrichter nicht erreichbar ist", + "fr": "Réinitialiser les valeurs lorsque l'état de l'onduleur est 'non disponible'" }, { "token": "INV_RESET_MAX_MIDNIGHT", "en": "Reset 'max' values at midnight", - "de": "Maximalwerte mitternachts zurücksetzen" + "de": "Maximalwerte mitternachts zurücksetzen", + "fr": "Réinitialiser les valeurs 'max' à minuit" }, { "token": "INV_START_WITHOUT_TIME", "en": "Start without time sync (useful in AP-Only-Mode)", - "de": "Kommunikation starten ohne gültige Zeit (sinnvoll im AP Modus)" + "de": "Kommunikation starten ohne gültige Zeit (sinnvoll im AP Modus)", + "fr": "Démarrer sans synchronisation de l'heure (utile en mode AP uniquement)" }, { "token": "INV_READ_GRID_PROFILE", "en": "Read Grid Profile", - "de": "Grid-Profil auslesen" + "de": "Grid-Profil auslesen", + "fr": "Lire le profil du réseau" }, { "token": "NTP_INTERVAL", "en": "NTP Interval (in minutes, min. 5 minutes)", - "de": "NTP Intervall (in Minuten, min. 5 Minuten)" + "de": "NTP Intervall (in Minuten, min. 5 Minuten)", + "fr": "Intervalle NTP (en minutes, min. 5 minutes)" }, { "token": "NTP_SET_SYS_TIME", "en": "set system time", - "de": "Systemzeit setzen" + "de": "Systemzeit setzen", + "fr": "régler l'heure du système" }, { "token": "BTN_FROM_BROWSER", "en": "from browser", - "de": "vom Browser übernehmen" + "de": "vom Browser übernehmen", + "fr": "du navigateur" }, { "token": "BTN_SYNC_NTP", "en": "sync NTP", - "de": "NTP synchronisieren" + "de": "NTP synchronisieren", + "fr": "synchroniser NTP" }, { "token": "NTP_SYS_TIME", "en": "System Time", - "de": "Systemzeit" + "de": "Systemzeit", + "fr": "Heure système" }, { "token": "SUNRISE_SUNSET", "en": "Sunrise & Sunset", - "de": "Sonnenaufgang & -untergang" + "de": "Sonnenaufgang & -untergang", + "fr": "Lever & Coucher du soleil" }, { "token": "LATITUDE", "en": "Latitude (decimal)", - "de": "Breitengrad (dezimal)" + "de": "Breitengrad (dezimal)", + "fr": "Latitude (décimale)" }, { "token": "LONGITUDE", "en": "Longitude (decimal)", - "de": "Längengrad (dezimal)" + "de": "Längengrad (dezimal)", + "fr": "Longitude (décimale)" }, { "token": "OFFSET_SUNRISE", "en": "Offset (sunrise)", - "de": "Zeitversatz (Sonnenaufgang)" + "de": "Zeitversatz (Sonnenaufgang)", + "fr": "Décalage (lever du soleil)" }, { "token": "OFFSET_SUNSET", "en": "Offset (sunset)", - "de": "Zeitversatz (Sonnenuntergang)" + "de": "Zeitversatz (Sonnenuntergang)", + "fr": "Décalage (coucher du soleil)" }, { "token": "MQTT_USER", "en": "Username (optional)", - "de": "Benutzername (optional)" + "de": "Benutzername (optional)", + "fr": "Nom d'utilisateur (optionnel)" }, { "token": "MQTT_PASSWORD", "en": "Password (optional)", - "de": "Passwort (optional)" + "de": "Passwort (optional)", + "fr": "Mot de passe (optionnel)" }, { "token": "MQTT_NOTE", "en": "Send Inverter data in a fixed interval, even if there is no change. A value of '0' disables the fixed interval. The data is published once it was successfully received from inverter. (default: 0)", - "de": "Wechselrichterdaten in fixem Intervall schicken, auch wenn es keine Änderung gab. Ein Wert von '0' deaktiviert das fixe Intervall, die Wechselrichterdaten werden übertragen, sobald neue zur Verfügung stehen. (Standard: 0)" + "de": "Wechselrichterdaten in fixem Intervall schicken, auch wenn es keine Änderung gab. Ein Wert von '0' deaktiviert das fixe Intervall, die Wechselrichterdaten werden übertragen, sobald neue zur Verfügung stehen. (Standard: 0)", + "fr": "Envoyer les données de l'onduleur à intervalles réguliers, même s'il n'y a pas de changement. Une valeur de '0' désactive l'intervalle fixe. Les données sont publiées une fois qu'elles ont été reçues avec succès de l'onduleur. (par défaut : 0)" }, { "token": "DISPLAY_CONFIG", "en": "Display Config", - "de": "Display Konfiguration" + "de": "Display Konfiguration", + "fr": "Configuration de l'affichage" }, { "token": "DISP_OFF_INV", "en": "Turn off while inverters are offline", - "de": "Schalte das Display aus, während die Wechselrichter aus sind" + "de": "Schalte das Display aus, während die Wechselrichter aus sind", + "fr": "éteindre lorsque les onduleurs sont hors ligne" }, { "token": "DISP_LUMINANCE", "en": "Luminance", - "de": "Helligkeit" + "de": "Helligkeit", + "fr": "Luminosité" }, { "token": "DISP_PINOUT", "en": "Pinout", - "de": "Anschlusseinstellungen" + "de": "Anschlusseinstellungen", + "fr": "Brochage" }, { "token": "GRAPH_OPTIONS", "en": "Graph options", - "de": "Graph Einstellungen" + "de": "Graph Einstellungen", + "fr": "Options du graphique" }, { "token": "GRAPH_SHOW_RATIO", "en": "Graph show ratio (0-100%)", - "de": "Graph Anzeigeverhältnis (0-100%)" + "de": "Graph Anzeigeverhältnis (0-100%)", + "fr": "Ratio d'affichage du graphique (0-100%)" }, { "token": "GRAPH_POSITION", "en": "Graph pos (from/to)", - "de": "Graph Position (von/bis)" + "de": "Graph Position (von/bis)", + "fr": "Position du graphique (de/à)" }, { "token": "GRAPH_LINES_1_2", "en": "Line 1-2", - "de": "Zeile 1-2" + "de": "Zeile 1-2", + "fr": "Ligne 1-2" }, { "token": "GRAPH_LINES_2_3", "en": "Line 2-3", - "de": "Zeile 2-3" + "de": "Zeile 2-3", + "fr": "Ligne 2-3" }, { "token": "GRAPH_LINES_1_3", "en": "Line 1-3", - "de": "Zeile 1-3" + "de": "Zeile 1-3", + "fr": "Ligne 1-3" }, { "token": "GRAPH_LINES_2_4", "en": "Line 2-4", - "de": "Zeile 2-4" + "de": "Zeile 2-4", + "fr": "Ligne 2-4" }, { "token": "GRAPH_LINES_1_4", "en": "Line 1-4", - "de": "Zeile 1-4" + "de": "Zeile 1-4", + "fr": "Ligne 1-4" }, { "token": "BTN_SAVE", "en": "save", - "de": "speichern" + "de": "speichern", + "fr": "enregistrer" }, { "token": "BTN_SEND", "en": "send", - "de": "senden" + "de": "senden", + "fr": "envoyer" }, { "token": "BTN_REBOOT_SUCCESSFUL_SAVE", "en": "Reboot device after successful save", - "de": "Nach erfolgreichem Speichern AhoyDTU neu starten" + "de": "Nach erfolgreichem Speichern AhoyDTU neu starten", + "fr": "Redémarrer l'appareil après l'enregistrement réussi" }, { "token": "BTN_ERASE", "en": "ERASE SETTINGS (not WiFi)", - "de": "Einstellungen zurücksetzen (nicht WiFi)" + "de": "Einstellungen zurücksetzen (nicht WiFi)", + "fr": "EFFACER LES PARAMèTRES (pas de WiFi)" }, { "token": "IM_EXPORT", "en": "Import / Export JSON Settings", - "de": "Import / Export JSON Einstellungen" + "de": "Import / Export JSON Einstellungen", + "fr": "Importer / Exporter les paramètres JSON" }, { "token": "IMPORT", "en": "Import", - "de": "Import" + "de": "Import", + "fr": "Importer" }, { "token": "EXPORT", "en": "Export", - "de": "Export" + "de": "Export", + "fr": "Exporter" }, { "token": "BTN_EXPORT", "en": "Export settings (JSON file)", - "de": "Einstellungen exportieren (JSON Datei)" + "de": "Einstellungen exportieren (JSON Datei)", + "fr": "Exporter les paramètres (fichier JSON)" }, { "token": "EXPORT_NOTE", "en": "(only values, passwords will be skipped!)", - "de": "(nur Werte, Passwörter werden nicht mit exportiert!)" + "de": "(nur Werte, Passwörter werden nicht mit exportiert!)", + "fr": "(seuls les valeurs, les mots de passe seront ignorés !)" }, { "token": "PIN_OFF", "en": "off / default", - "de": "aus / Standard" + "de": "aus / Standard", + "fr": "éteint / par défaut" }, { "token": "PIN_NO_IRQ", "en": "no IRQ!", - "de": "kein Interrupt!" + "de": "kein Interrupt!", + "fr": "pas de IRQ !" }, { "token": "PIN_INPUT_ONLY", "en": "in only", - "de": "nur Eingang" + "de": "nur Eingang", + "fr": "entrée uniquement" }, { "token": "PIN_DONT_USE", "en": "DONT USE", - "de": "nicht benutzen" + "de": "nicht benutzen", + "fr": "NE PAS UTILISER" }, { "token": "PIN_NOT_AVAIL", "en": "not available", - "de": "nicht verfügbar" + "de": "nicht verfügbar", + "fr": "non disponible" }, { "token": "PIN_RECOMMENDED", "en": "recommended", - "de": "empfohlen" + "de": "empfohlen", + "fr": "recommandé" }, { "token": "PIN_EXPERIMENTAL", "en": "experimental", - "de": "experimentell" + "de": "experimentell", + "fr": "expérimental" }, { "token": "PIN_LOW_ACTIVE", "en": "low active", - "de": "low aktiv" + "de": "low aktiv", + "fr": "bas actif" }, { "token": "PIN_HIGH_ACTIVE", "en": "high active", - "de": "high aktiv" + "de": "high aktiv", + "fr": "haut actif" }, { "token": "NETWORK_SCANNING", "en": "scanning ...", - "de": "suche ..." + "de": "suche ...", + "fr": "analyse en cours ..." }, { "token": "ERROR", "en": "Error:", - "de": "Fehler:" + "de": "Fehler:", + "fr": "Erreur :" }, { "token": "NTP_COMMAND_EXE", "en": "command executed, set new time ...", - "de": "Befehl ausgeführt, setze neue Zeit ..." + "de": "Befehl ausgeführt, setze neue Zeit ...", + "fr": "commande exécutée, définir une nouvelle heure ..." }, { "token": "NTP_SYNCED_AT", "en": "synced at", - "de": "synchronisiert um" + "de": "synchronisiert um", + "fr": "synchronisé à" }, { "token": "NTP_DIFF", "en": "difference", - "de": "Unterschied" + "de": "Unterschied", + "fr": "différence" }, { "token": "MQTT_EXE", "en": "command executed", - "de": "Befehl ausgeführt" + "de": "Befehl ausgeführt", + "fr": "commande exécutée" }, { "token": "IMPORT_UPLOAD_STARTED", "en": "upload started", - "de": "Hochladen gestartet" + "de": "Hochladen gestartet", + "fr": "téléchargement démarré" }, { "token": "INV_EDIT", "en": "Edit", - "de": "Bearbeiten" + "de": "Bearbeiten", + "fr": "Modifier" }, { "token": "INV_DELETE", "en": "Delete", - "de": "Löschen" + "de": "Löschen", + "fr": "Supprimer" }, { "token": "ENABLED", "en": "enabled", - "de": "aktiviert" + "de": "aktiviert", + "fr": "activé" }, { "token": "DISABLED", "en": "disabled", - "de": "deaktiviert" + "de": "deaktiviert", + "fr": "désactivé" }, { "token": "BTN_INV_ADD", "en": "add Inverter", - "de": "Wechselrichter hinzufuegen" + "de": "Wechselrichter hinzufuegen", + "fr": "ajouter un onduleur" }, { "token": "INV_INPUT", "en": "Input", - "de": "Eingang" + "de": "Eingang", + "fr": "Entrée" }, { "token": "INV_MAX_MODULE_POWER", "en": "Max Module Power", - "de": "Maximale Panelleistung" + "de": "Maximale Panelleistung", + "fr": "Puissance maximale du module" }, { "token": "INV_YIELD_CORR", "en": "Yield Correction", - "de": "Ertragskorrektur" + "de": "Ertragskorrektur", + "fr": "Correction du rendement" }, { "token": "TAB_GENERAL", "en": "General", - "de": "Allgemein" + "de": "Allgemein", + "fr": "Général" }, { "token": "TAB_INPUTS", "en": "Inputs", - "de": "Eingaenge" + "de": "Eingaenge", + "fr": "Entrées" }, { "token": "TAB_RADIO", "en": "Radio", - "de": "Funkmodul" + "de": "Funkmodul", + "fr": "Radio" }, { "token": "TAB_ADVANCED", "en": "Advanced", - "de": "Erweitert" + "de": "Erweitert", + "fr": "Avancé" }, { "token": "INV_ENABLE", "en": "Enabled", - "de": "aktiviert" + "de": "aktiviert", + "fr": "activé" }, { "token": "INV_SERIAL", "en": "Serial", - "de": "Seriennummer" + "de": "Seriennummer", + "fr": "Série" }, { "token": "INV_FREQUENCY", "en": "Frequency", - "de": "Frequenz" + "de": "Frequenz", + "fr": "Fréquence" }, { "token": "INV_POWER_LEVEL", "en": "Power Level", - "de": "Sendeleistung" + "de": "Sendeleistung", + "fr": "Niveau de puissance" }, { "token": "INV_PAUSE_DURING_NIGHT", "en": "Pause communication during night (lat. and lon. need to be set)", - "de": "Kommunikation während der Nacht pausieren (Breiten- und Längengrad müssen gesetzt sein" + "de": "Kommunikation während der Nacht pausieren (Breiten- und Längengrad müssen gesetzt sein", + "fr": "Pause de communication pendant la nuit (lat. et lon. doivent être définis)" }, { "token": "BTN_SAVE", "en": "save", - "de": "speichern" + "de": "speichern", + "fr": "enregistrer" }, { "token": "INV_EDIT_MODAL", "en": "Edit inverter", - "de": "Wechselrichter editieren" + "de": "Wechselrichter editieren", + "fr": "Modifier l'onduleur" }, { "token": "INV_DELETE_SURE", "en": "do you really want to delete inverter?", - "de": "Willst du den Wechselrichter wirklich löschen?" + "de": "Willst du den Wechselrichter wirklich löschen?", + "fr": "voulez-vous vraiment supprimer l'onduleur ?" }, { "token": "BTN_YES", "en": "yes", - "de": "ja" + "de": "ja", + "fr": "oui" }, { "token": "INV_DELETE_MODAL", "en": "Delete inverter", - "de": "Wechselrichter löschen " + "de": "Wechselrichter löschen ", + "fr": "Supprimer l'onduleur" }, { "token": "NTP_MINUTES", "en": "minutes", - "de": "Minuten" + "de": "Minuten", + "fr": "minutes" }, { "token": "LED_AT_LEAST_ONE_PRODUCING", "en": "At least one inverter is producing", - "de": "mindestens ein Wechselrichter produziert" + "de": "mindestens ein Wechselrichter produziert", + "fr": "Au moins un onduleur produit" }, { "token": "LED_MQTT_CONNECTED", "en": "MqTT connected", - "de": "MqTT verbunden" + "de": "MqTT verbunden", + "fr": "MQTT connecté" }, { "token": "LED_NIGHT_TIME", "en": "Night time", - "de": "Nachtschaltung" + "de": "Nachtschaltung", + "fr": "Nuit" }, { "token": "LED_POLARITY", "en": "LED polarity", - "de": "LED Polarität" + "de": "LED Polarität", + "fr": "Polarité de la LED" }, { "token": "LED_LUMINANCE", "en": "LED luminance", - "de": "LED Helligkeit" + "de": "LED Helligkeit", + "fr": "Luminosité de la LED" }, { "token": "NRF24_ENABLE", "en": "NRF24 radio enable", - "de": "NRF24 Funkmodul aktivieren" + "de": "NRF24 Funkmodul aktivieren", + "fr": "Activation de la radio NRF24" }, { "token": "CMT_ENABLE", "en": "CMT2300A radio enable", - "de": "CMT2300A Funkmodul aktivieren" + "de": "CMT2300A Funkmodul aktivieren", + "fr": "Activation de la radio CMT2300A" }, { "token": "DISP_NONE", "en": "None", - "de": "keins" + "de": "keins", + "fr": "Aucun" }, { "token": "DISP_TYPE", "en": "Type", - "de": "Typ" + "de": "Typ", + "fr": "Type" }, { "token": "DISP_ROTATION", "en": "Rotation", - "de": "Drehung" + "de": "Drehung", + "fr": "Rotation" }, { "token": "DISP_SCREENSAVER_OFF", "en": "off", - "de": "aus" + "de": "aus", + "fr": "éteint" }, { "token": "DISP_PIXEL_SHIFT", "en": "pixel shift", - "de": "Bildversatz" + "de": "Bildversatz", + "fr": "Décalage de pixel" }, { "token": "DISP_MOTION_SENS", "en": "motion sensor", - "de": "Bewegungssensor" + "de": "Bewegungssensor", + "fr": "capteur de mouvement" }, { "token": "DISP_SCREENSAVER", "en": "Screensaver (OLED only)", - "de": "Bildschirmschoner (nur OLED)" + "de": "Bildschirmschoner (nur OLED)", + "fr": "économiseur d'écran (uniquement OLED)" }, { "token": "NETWORK_PLEASE_SELECT", "en": "please select network", - "de": "bitte Netzwerk auswählen" + "de": "bitte Netzwerk auswählen", + "fr": "veuillez sélectionner le réseau" }, { "token": "NO_NETWORK_FOUND", "en": "no network found", - "de": "kein Netzwerk gefunden" + "de": "kein Netzwerk gefunden", + "fr": "aucun réseau trouvé" } ] }, @@ -776,92 +927,110 @@ { "token": "UNKNOWN", "en": "unknown", - "de": "unbekannt" + "de": "unbekannt", + "fr": "inconnu" }, { "token": "CONNECTED", "en": "connected", - "de": "verbunden" + "de": "verbunden", + "fr": "connecté" }, { "token": "NOT", "en": "not", - "de": "nicht" + "de": "nicht", + "fr": "non" }, { "token": "IRQ_WORKING", "en": "Interrupt Pin working", - "de": "Interrupt Pin funktioniert" + "de": "Interrupt Pin funktioniert", + "fr": "Broche d'interruption fonctionne" }, { "token": "NRF24_DATA_RATE", "en": "NRF24 Data Rate", - "de": "NRF24 Geschwindigkeit" + "de": "NRF24 Geschwindigkeit", + "fr": "Débit de données NRF24" }, { "token": "NOT_ENABLED", "en": "not enabled", - "de": "nicht aktiviert" + "de": "nicht aktiviert", + "fr": "non activé" }, { "token": "NRF24_RADIO", "en": "Radio NRF24", - "de": "NRF24 Funkmodul" + "de": "NRF24 Funkmodul", + "fr": "Radio NRF24" }, { "token": "CMT_RADIO", "en": "Radio CMT", - "de": "CMT2300A Funkmodul" + "de": "CMT2300A Funkmodul", + "fr": "Radio CMT" }, { "token": "TRUE", "en": "true", - "de": "ja" + "de": "ja", + "fr": "vrai" }, { "token": "FALSE", "en": "false", - "de": "nein" + "de": "nein", + "fr": "faux" }, { "token": "ENABLED", "en": "enabled", - "de": "aktiviert" + "de": "aktiviert", + "fr": "activé" }, { "token": "SUN", "en": "Sun", - "de": "Sonne" + "de": "Sonne", + "fr": "Soleil" }, { "token": "SUNRISE", "en": "sunrise", - "de": "Sonnenaufgang" + "de": "Sonnenaufgang", + "fr": "lever du soleil" }, { "token": "SUNSET", "en": "sunset", - "de": "Sonnenuntergang" + "de": "Sonnenuntergang", + "fr": "coucher du soleil" }, { "token": "COMMUNICATION_START", "en": "Communication start", - "de": "Start der Kommunikation" + "de": "Start der Kommunikation", + "fr": "Début de la communication" }, { "token": "COMMUNICATION_STOP", "en": "Communication stop", - "de": "Ende der Kommunikation" + "de": "Ende der Kommunikation", + "fr": "Fin de la communication" }, { "token": "NIGHT_BEHAVE", "en": "Night behaviour", - "de": "Verhalten bei Nacht" + "de": "Verhalten bei Nacht", + "fr": "Comportement nocturne" }, { "token": "COMMUNICATING", "en": "communicating", - "de": "aktiv" + "de": "aktiv", + "fr": "en communication" } ] }, @@ -871,47 +1040,56 @@ { "token": "BTN_CLEAR", "en": "clear", - "de": "löschen" + "de": "löschen", + "fr": "effacer" }, { "token": "BTN_AUTOSCROLL", "en": "autoscroll", - "de": "automatisch scrollen" + "de": "automatisch scrollen", + "fr": "DÉF'ILEMENT AUTOMATIQUE" }, { "token": "BTN_MANUALSCROLL", "en": "manual scroll", - "de": "manuell scrollen" + "de": "manuell scrollen", + "fr": "DÉFILEMENT MANUEL" }, { "token": "BTN_COPY", "en": "copy", - "de": "kopieren" + "de": "kopieren", + "fr": "copier" }, { "token": "CONSOLE_ACTIVE", "en": "console active", - "de": "Konsole aktiv" + "de": "Konsole aktiv", + "fr": "console active" }, { "token": "UPTIME", "en": "uptime", - "de": "Laufzeit" + "de": "Laufzeit", + "fr": "temps de fonctionnement" }, { "token": "DAYS", "en": "days", - "de": "Tage" + "de": "Tage", + "fr": "jours" }, { "token": "COPIED_TO_CLIPBOARD", "en": "Copied to clipboard", - "de": "in die Zwischenablage kopiert" + "de": "in die Zwischenablage kopiert", + "fr": "Copié dans le presse-papiers" }, { "token": "CLIPBOARD_FAILED", "en": "Copy failed", - "de": "kopieren fehlgeschlagen" + "de": "kopieren fehlgeschlagen", + "fr": "Echec de la copie" } ] }, @@ -921,172 +1099,200 @@ { "token": "SUPPORT", "en": "Support this project", - "de": "Dieses Projekt unterstützen" + "de": "Dieses Projekt unterstützen", + "fr": "Soutenir ce projet" }, { "token": "CHANGELOG", "en": "Changelog", - "de": "Änderungshistorie" + "de": "Änderungshistorie", + "fr": "Journal des modifications" }, { "token": "DISCUSS", "en": "Discuss with us on", - "de": "Diskutiere mit uns bei" + "de": "Diskutiere mit uns bei", + "fr": "Discuter avec nous sur" }, { "token": "REPORT", "en": "Report", - "de": "Melde " + "de": "Melde ", + "fr": "Rapport" }, { "token": "ISSUES", "en": "Issues", - "de": "Fehler " + "de": "Fehler ", + "fr": "Problèmes" }, { "token": "CONTRIBUTE", "en": "Contribute to", - "de": "Unterstütze bei" + "de": "Unterstütze bei", + "fr": "Contribuer à" }, { "token": "DOCUMENTATION", "en": "documentation", - "de": "der Dokumentation" + "de": "der Dokumentation", + "fr": "documentation" }, { "token": "DEV_FIRMWARE", "en": "development firmware", - "de": "Entwicklerversionen der Firmware" + "de": "Entwicklerversionen der Firmware", + "fr": "micrologiciel de développement" }, { "token": "DEV_CHANGELOG", "en": "Development Changelog", - "de": "Änderungshistorie der Entwicklerversionen" + "de": "Änderungshistorie der Entwicklerversionen", + "fr": "Journal des modifications de développement" }, { "token": "DON_MAKE", "en": "make a", - "de": "Unterstüze mit" - }, - { - "token": "DON_MAKE", - "en": "make a", - "de": "Unterstüze z.B. mit" + "de": "Unterstüze z.B. mit", + "fr": "faire un" }, { "token": "DONATION", "en": "donation", - "de": "Paypal" + "de": "Paypal", + "fr": "don" }, { "token": "COMMAND_EXE", "en": "command executed", - "de": "Befehl ausgeführt" + "de": "Befehl ausgeführt", + "fr": "commande exécutée" }, { "token": "ERROR", "en": "Error", - "de": "Fehler" + "de": "Fehler", + "fr": "Erreur" }, { "token": "DAY", "en": "day", - "de": "Tag" + "de": "Tag", + "fr": "jour" }, { "token": "S", "en": "s", - "de": "e" + "de": "e", + "fr": "s" }, { "token": "NTP_UNREACH", "en": "NTP timeserver unreachable", - "de": "NTP Zeitserver nicht erreichbar" + "de": "NTP Zeitserver nicht erreichbar", + "fr": "Serveur de temps NTP inaccessible" }, { "token": "POLLING_STOP", "en": "Polling inverter(s), will pause at sunset", - "de": "Abfrage der Wechselrichter wird zum Sonnenuntergang stoppen" + "de": "Abfrage der Wechselrichter wird zum Sonnenuntergang stoppen", + "fr": "Interrogation de l'onduleur(s), fera une pause au coucher du soleil" }, { "token": "NIGHT_TIME", "en": "Night time, inverter polling disabled", - "de": "Wechselrichterabfrage deaktiviert (Nacht)" + "de": "Wechselrichterabfrage deaktiviert (Nacht)", + "fr": "Temps de nuit, interrogation de l'onduleur désactivée" }, { "token": "PAUSED_AT", "en": "paused at", - "de": "pausiert um" + "de": "pausiert um", + "fr": "en pause à" }, { "token": "START_AT", "en": "will start polling at", - "de": "Abfrage startet am" + "de": "Abfrage startet am", + "fr": "démarrera l'interrogation à" }, { "token": "DISABLED", "en": "disabled", - "de": "deaktiviert" + "de": "deaktiviert", + "fr": "désactivé" }, { "token": "NOT_YET_AVAIL", "en": "not yet available", - "de": "gerade nicht verfügbar" + "de": "gerade nicht verfügbar", + "fr": "pas encore disponible" }, { "token": "AVAIL", "en": "available and is", - "de": "verfügbar und" + "de": "verfügbar und", + "fr": "disponible et est" }, { "token": "AVAIL_NO_DATA", "en": "available but no data was received until now", - "de": "verfügbar, aber bis jetzt keine Daten empfangen" + "de": "verfügbar, aber bis jetzt keine Daten empfangen", + "fr": "disponible mais aucune donnée n'a été reçue jusqu'à présent" }, { "token": "NOT_PRODUCING", "en": "not producing", - "de": "produziert nicht" + "de": "produziert nicht", + "fr": "ne produit pas" }, { "token": "PRODUCING", "en": "producing", - "de": "produziert" + "de": "produziert", + "fr": "produit" }, { "token": "INVERTER", "en": "Inverter", - "de": "Wechselrichter" + "de": "Wechselrichter", + "fr": "Onduleur" }, { "token": "IS", "en": "is", - "de": "ist" + "de": "ist", + "fr": "est" }, { "token": "LAST_SUCCESS", "en": "last successful transmission", - "de": "letzte erfolgreiche Übertragung" + "de": "letzte erfolgreiche Übertragung", + "fr": "dernière transmission réussie" }, { "token": "UPDATE_AVAIL", "en": "Update available, current released version", - "de": "Update verfügbar, aktuell veröffentlichte Version" + "de": "Update verfügbar, aktuell veröffentlichte Version", + "fr": "Mise à jour disponible, version actuellement publiée" }, { "token": "USING_DEV_VERSION", "en": "You are using development version", - "de": "Du verwendest eine Entwicklerversion" + "de": "Du verwendest eine Entwicklerversion", + "fr": "Vous utilisez une version de développement" }, { "token": "DEV_ISSUE_RELEASE_VERSION", "en": "In case of issues you may want to try the current stable release", - "de": "Wenn du Fehler feststellst solltest du die aktuelle Releaseversion verwenden" + "de": "Wenn du Fehler feststellst solltest du die aktuelle Releaseversion verwenden", + "fr": "En cas de problèmes, vous voudrez peut-être essayer la version stable actuelle" }, { "token": "RELEASE_INSTALLED", "en": "You are using the current stable release", - "de": "Du verwendest das aktuelle Release" + "de": "Du verwendest das aktuelle Release", + "fr": "Vous utilisez la version stable actuelle" } ] }, @@ -1096,52 +1302,62 @@ { "token": "SELECT_FILE", "en": "Select firmware file", - "de": "Firmware Datei auswählen" + "de": "Firmware Datei auswählen", + "fr": "Sélectionner le fichier de micrologiciel" }, { "token": "BTN_UPDATE", "en": "Update", - "de": "aktualisieren" + "de": "aktualisieren", + "fr": "Mettre à jour" }, { "token": "BTN_UPDATE", "en": "Update", - "de": "aktualisieren" + "de": "aktualisieren", + "fr": "Mettre à jour" }, { "token": "DOWNLOADS", "en": "Download latest Release and Development versions (without login)", - "de": "Lade die letzte Releaseversion oder Entwicklerversion herunter (ohne Login)" + "de": "Lade die letzte Releaseversion oder Entwicklerversion herunter (ohne Login)", + "fr": "Téléchargez les dernières versions de release et de développement (sans connexion)" }, { "token": "INSTALLED_VERSION", "en": "installed version (original filename)", - "de": "aktuell installierte Version" + "de": "aktuell installierte Version", + "fr": "version installée (nom de fichier original)" }, { "token": "UPDATE_STARTED", "en": "update started", - "de": "Aktualisierung gestartet" + "de": "Aktualisierung gestartet", + "fr": "Mise à jour démarrée" }, { "token": "UPDATE_MODAL", "en": "Warning", - "de": "Warnung" + "de": "Warnung", + "fr": "Avertissement" }, { "token": "WARN_DIFF_ENV", "en": "your environment may not match the update file!", - "de": "Die ausgewählte Firmware passt u.U. nicht zum Chipsatz!" + "de": "Die ausgewählte Firmware passt u.U. nicht zum Chipsatz!", + "fr": "Votre environnement peut ne pas correspondre au fichier de mise à jour!" }, { "token": "CONTIUE", "en": "continue", - "de": "fortfahren" + "de": "fortfahren", + "fr": "continuer" }, { "token": "CANCEL", "en": "cancel", - "de": "abbrechen" + "de": "abbrechen", + "fr": "annuler" } ] }, @@ -1151,342 +1367,410 @@ { "token": "EVERY", "en": "Every", - "de": "Alle" + "de": "Alle", + "fr": "Toutes" }, { "token": "UPDATE_SECS", "en": "seconds the values are updated", - "de": "Sekunden werden die Daten aktualisiert" + "de": "Sekunden werden die Daten aktualisiert", + "fr": "secondes les valeurs sont mises à jour" }, { "token": "TOTAL", "en": "TOTAL", - "de": "GESAMT" + "de": "GESAMT", + "fr": "TOTAL" }, { "token": "AC_POWER", "en": "AC Power", - "de": "AC Leistung" + "de": "AC Leistung", + "fr": "Puissance AC" }, { "token": "YIELD_DAY", "en": "Yield Day", - "de": "Tagesertrag" + "de": "Tagesertrag", + "fr": "Rendement journalier" }, { "token": "YIELD_TOTAL", "en": "Yield Total", - "de": "Gesamtertrag" + "de": "Gesamtertrag", + "fr": "Rendement total" }, { "token": "MAX_POWER", "en": "Max Power", - "de": "Maximale Leistung" + "de": "Maximale Leistung", + "fr": "Puissance maximale" }, { "token": "DC_POWER", "en": "DC Power", - "de": "DC Leistung" + "de": "DC Leistung", + "fr": "Puissance DC" }, { "token": "REACTIVE_POWER", "en": "Reactive Power", - "de": "Blindleistung" + "de": "Blindleistung", + "fr": "Puissance réactive" }, { "token": "ACTIVE_POWER_CONTROL", "en": "Active Power Control", - "de": "Leistungsbegrenzung" + "de": "Leistungsbegrenzung", + "fr": "Contrôle de la puissance active" }, { "token": "APC", "en": "APC", - "de": "Limit" + "de": "Limit", + "fr": "PLA" }, { "token": "ALARMS", "en": "Alarms", - "de": "Meldungen" + "de": "Meldungen", + "fr": "Alarmes" }, { "token": "MAX_AC_POWER", "en": "Max AC Power", - "de": "Max AC Leistung" + "de": "Max AC Leistung", + "fr": "Puissance AC maximale" }, { "token": "DC_POWER", "en": "DC Power", - "de": "DC Leistung" + "de": "DC Leistung", + "fr": "Puissance DC" }, { "token": "DC_VOLTAGE", "en": "DC Voltage", - "de": "DC Spannung" + "de": "DC Spannung", + "fr": "Tension DC" }, { "token": "AC_VOLTAGE", "en": "AC Voltage", - "de": "Netzspannung" + "de": "Netzspannung", + "fr": "Tension AC" }, { "token": "AC_CURRENT", "en": "AC Current", - "de": "AC Strom" + "de": "AC Strom", + "fr": "Courant AC" }, { "token": "FREQUENCY", "en": "Frequency", - "de": "Frequenz" + "de": "Frequenz", + "fr": "Fréquence" }, { "token": "EFFICIENCY", "en": "Efficiency", - "de": "Effizienz" + "de": "Effizienz", + "fr": "Efficacité" }, { "token": "POWER_FACTOR", "en": "Power Factor", - "de": "Leistungsfaktor" + "de": "Leistungsfaktor", + "fr": "Facteur de puissance" }, { "token": "IRRADIATION", "en": "Irradiation", - "de": "Einstrahlung" + "de": "Einstrahlung", + "fr": "Irradiation" }, { "token": "DC_CURRENT", "en": "DC Current", - "de": "DC Strom" + "de": "DC Strom", + "fr": "Courant DC" }, { "token": "LAST_RECEIVED", "en": "Last received data requested at", - "de": "Zuletzt empfangene Daten wurden angefragt am" + "de": "Zuletzt empfangene Daten wurden angefragt am", + "fr": "Dernières données reçues demandées à" }, { "token": "NOTHING_RECEIVED", "en": "nothing received", - "de": "nichts empfangen" + "de": "nichts empfangen", + "fr": "rien reçu" }, { "token": "ALARMS_MODAL", "en": "Alarms of inverter", - "de": "Meldungen von Wechselrichter" + "de": "Meldungen von Wechselrichter", + "fr": "Alarmes de l'onduleur" }, { "token": "SERIAL", "en": "Serial", - "de": "Seriennummer" + "de": "Seriennummer", + "fr": "Série" }, { "token": "BTN_SHOW", "en": "show", - "de": "anzeigen" + "de": "anzeigen", + "fr": "montrer" }, { "token": "EVENT", "en": "Event", - "de": "Ereignis" + "de": "Ereignis", + "fr": "événement" }, { "token": "END", "en": "End", - "de": "Ende" + "de": "Ende", + "fr": "Fin" }, { "token": "HW_NUMBER", "en": "Hardware Number", - "de": "Hardware Nummer" + "de": "Hardware Nummer", + "fr": "Numéro de matériel" }, { "token": "INV_INFO", "en": "Info for inverter", - "de": "Info für Wechselrichter" + "de": "Info für Wechselrichter", + "fr": "Info pour l'onduleur" }, { "token": "VALUE", "en": "Value", - "de": "Wert" + "de": "Wert", + "fr": "Valeur" }, { "token": "RANGE", "en": "Range", - "de": "Bereich" + "de": "Bereich", + "fr": "Plage" }, { "token": "DEFAULT", "en": "Default", - "de": "Standard" + "de": "Standard", + "fr": "Défaut" }, { "token": "PROFILE_NOT_READ", "en": "Profile was not read until now, maybe turned off", - "de": "Grid-Profil wurde bis jetzt noch nicht gelesen oder das Auslesen ist nicht aktiv" + "de": "Grid-Profil wurde bis jetzt noch nicht gelesen oder das Auslesen ist nicht aktiv", + "fr": "Le profil n'a pas été lu jusqu'à présent, peut-être éteint" }, { "token": "UNKNOWN_PROFILE", "en": "Unknown Profile", - "de": "Unbekanntes Profil" + "de": "Unbekanntes Profil", + "fr": "Profil inconnu" }, { "token": "OPEN_ISSUE", "en": "Please open a new issue at https://github.com/lumapu/ahoy and copy the raw data into it", - "de": "Bitte erstelle einen neuen Issue auf https://github.com/lumapu/ahoy und kopiere die Rohdaten hinein" + "de": "Bitte erstelle einen neuen Issue auf https://github.com/lumapu/ahoy und kopiere die Rohdaten hinein", + "fr": "Veuillez ouvrir un nouveau problème sur https://github.com/lumapu/ahoy et copier les données brutes dedans" }, { "token": "PROFILE_MODAL", "en": "Grid Profile for inverter", - "de": "Grid-Profil für Wechselrichter" + "de": "Grid-Profil für Wechselrichter", + "fr": "Profil de réseau pour onduleur" }, { "token": "TX_COUNT", "en": "TX count", - "de": "Sendezähler" + "de": "Sendezähler", + "fr": "Nombre de transmissions" }, { "token": "RX_SUCCESS", "en": "RX success", - "de": "erfolgreicher Empfang" + "de": "erfolgreicher Empfang", + "fr": "Réception réussie" }, { "token": "RX_FAIL", "en": "RX fail", - "de": "fehlgeschlagener Empfang" + "de": "fehlgeschlagener Empfang", + "fr": "échec de réception" }, { "token": "RX_NO_ANSWER", "en": "RX no answer", - "de": "keine Antwort" + "de": "keine Antwort", + "fr": "Pas de réponse" }, { "token": "RX_FRAGMENTS", "en": "RX fragments", - "de": "empfangene Fragmente" + "de": "empfangene Fragmente", + "fr": "Fragments reçus" }, { "token": "TX_RETRANSMITS", "en": "TX retransmits", - "de": "erneute Sendeversuche" + "de": "erneute Sendeversuche", + "fr": "Retransmissions TX" }, { "token": "INV_LOSS_RATE", "en": "Inverter loss rate", - "de": "Wechselrichter Verlustrate" + "de": "Wechselrichter Verlustrate", + "fr": "Taux de perte de l'onduleur" }, { "token": "DTU_LOSS_RATE", "en": "DTU loss rate", - "de": "DTU Verlustrate" + "de": "DTU Verlustrate", + "fr": "Taux de perte du DTU" }, { "token": "RADIO_STAT_MODAL", "en": "Radio statistics for inverter", - "de": "Funkstatistik für Wechselrichter" + "de": "Funkstatistik für Wechselrichter", + "fr": "Statistiques radio pour onduleur" }, { "token": "LOST_1", "en": "lost", - "de": "" + "de": "", + "fr": "perdu" }, { "token": "LOST_2", "en": "of", - "de": "von" + "de": "von", + "fr": "de" }, { "token": "LOST_3", "en": "", - "de": "verloren" + "de": "verloren", + "fr": "" }, { "token": "LIMIT_VALUE", "en": "Limit Value", - "de": "Wert der Leistungsbegrenzung" + "de": "Wert der Leistungsbegrenzung", + "fr": "Valeur limite" }, { "token": "KEEP_LIMIT", "en": "Keep limit over inverter restart", - "de": "Leistungsbegrenzung dauerhaft speichern (im Wechselrichter)" + "de": "Leistungsbegrenzung dauerhaft speichern (im Wechselrichter)", + "fr": "Conserver la limite lors du redémarrage de l'onduleur" }, { "token": "BTN_APPLY", "en": "Apply", - "de": "anwenden" + "de": "anwenden", + "fr": "Appliquer" }, { "token": "CONTROL", "en": "Control", - "de": "Ansteuern" + "de": "Ansteuern", + "fr": "Contrôle" }, { "token": "RESTART", "en": "restart", - "de": "neustarten" + "de": "neustarten", + "fr": "redémarrer" }, { "token": "TURN_OFF", "en": "turn off", - "de": "ausschalten" + "de": "ausschalten", + "fr": "éteindre" }, { "token": "TURN_ON", "en": "turn on", - "de": "anschalten" + "de": "anschalten", + "fr": "allumer" }, { "token": "RESULT", "en": "Result", - "de": "Status" + "de": "Status", + "fr": "Résultat" }, { "token": "POWER_LIMIT_MODAL", "en": "Active Power Control for inverter", - "de": "Leistungsbegrenzung für Wechselrichter" + "de": "Leistungsbegrenzung für Wechselrichter", + "fr": "Contrôle de la puissance active pour onduleur" }, { "token": "CMD_RECEIVED_WAIT_ACK", "en": "received command, waiting for inverter acknowledge ...", - "de": "Befehl erhalten, warte auf Bestäigung vom Wechselrichter ..." + "de": "Befehl erhalten, warte auf Bestäigung vom Wechselrichter ...", + "fr": "commande reçue, en attente de l'accusé de réception de l'onduleur ..." }, { "token": "COMMAND_RECEIVED", "en": "command received", - "de": "Befehl erhalten" + "de": "Befehl erhalten", + "fr": "commande reçue" }, { "token": "ERROR", "en": "Error", - "de": "Fehler" + "de": "Fehler", + "fr": "Erreur" }, { "token": "INV_ACK", "en": "inverter acknowledged active power control command", - "de": "Wechselrichter hat die Leistungsbegrenzung akzeptiert" + "de": "Wechselrichter hat die Leistungsbegrenzung akzeptiert", + "fr": "l'onduleur a reconnu la commande de contrôle de la puissance active" }, { "token": "ERR_AUTH", "en": "authentication error", - "de": "Authentifizierungsfehler" + "de": "Authentifizierungsfehler", + "fr": "erreur d'authentification" }, { "token": "ERR_INDEX", "en": "inverter index invalid", - "de": "Wechselrichterindex ungültig" + "de": "Wechselrichterindex ungültig", + "fr": "index de l'onduleur non valide" }, { "token": "ERR_UNKNOWN_CMD", "en": "unknown cmd", - "de": "unbekanntes Kommando" + "de": "unbekanntes Kommando", + "fr": "commande inconnue" }, { "token": "ERR_LIMIT_NOT_ACCEPT", "en": "inverter does not accept dev control request at this moment", - "de": "Leistungsbegrenzung / Ansteuerung aktuell nicht möglich" + "de": "Leistungsbegrenzung / Ansteuerung aktuell nicht möglich", + "fr": "l'onduleur n'accepte pas la demande de contrôle de périphérique pour le moment" }, { "token": "ERR_PROTECTED", "en": "not logged in, command not possible!", - "de": "nicht angemeldet, Kommando nicht möglich!" + "de": "nicht angemeldet, Kommando nicht möglich!", + "fr": "non connecté, commande non possible !" } ] }, @@ -1496,27 +1780,32 @@ { "token": "SAVE_SETTINGS", "en": "Saving settings...", - "de": "Einstellungen werden gespeichert ..." + "de": "Einstellungen werden gespeichert ...", + "fr": "Enregistrement des paramètres..." }, { "token": "SUCCESS_SAVED_RELOAD", "en": "Settings successfully saved. Automatic page reload in 3 seconds.", - "de": "Einstellungen erfolgreich gespeichert. Automatische Weiterleitung in 3 Sekunden" + "de": "Einstellungen erfolgreich gespeichert. Automatische Weiterleitung in 3 Sekunden", + "fr": "Paramètres enregistrés avec succès. Rechargement automatique de la page dans 3 secondes." }, { "token": "SUCCESS_SAVED_REBOOT", "en": "Settings successfully saved. Rebooting. Automatic redirect in", - "de": "Einstellungen erfolgreich gespeichert. Automatische Weiterleitung nach Reboot in" + "de": "Einstellungen erfolgreich gespeichert. Automatische Weiterleitung nach Reboot in", + "fr": "Paramètres enregistrés avec succès. Redémarrage. Redirection automatique dans" }, { "token": "SECONDS", "en": "seconds", - "de": "Sekunden" + "de": "Sekunden", + "fr": "secondes" }, { "token": "FAILED_SAVE", "en": "Failed saving settings", - "de": "Fehler beim Speichern" + "de": "Fehler beim Speichern", + "fr": "échec de l'enregistrement des paramètres" } ] }, @@ -1526,37 +1815,44 @@ { "token": "TOTAL_POWER", "en": "Total Power", - "de": "Gesamtleistung" + "de": "Gesamtleistung", + "fr": "Puissance totale" }, { "token": "TOTAL_YIELD_PER_DAY", "en": "Total Yield per day", - "de": "Gesamtertrag pro Tag" + "de": "Gesamtertrag pro Tag", + "fr": "Rendement total par jour" }, { "token": "MAX_DAY", "en": "maximum day", - "de": "Tagesmaximum" + "de": "Tagesmaximum", + "fr": "Jour maximum" }, { "token": "LAST_VALUE", "en": "last value", - "de": "letzter Wert" + "de": "letzter Wert", + "fr": "dernière valeur" }, { "token": "MAXIMUM", "en": "maximum value", - "de": "Maximalwert" + "de": "Maximalwert", + "fr": "valeur maximale" }, { "token": "UPDATED", "en": "Updated every", - "de": "aktualisiert alle" + "de": "aktualisiert alle", + "fr": "Mise à jour toutes les" }, { "token": "SECONDS", "en": "seconds", - "de": "Sekunden" + "de": "Sekunden", + "fr": "secondes" } ] }