From 0ee784cf47f74245c0df3e7bacd5f901fe2e299f Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 Date: Sun, 16 Aug 2026 17:06:27 +0200 Subject: [PATCH] General design overhaul and added lots of new languages (finnish swedish norwegian turkish) --- evcharger-app/CMakeLists.txt | 19 +- evcharger-app/appsettings.cpp | 43 + evcharger-app/appsettings.h | 19 + evcharger-app/i18n/qml_de.ts | 2424 +++++++---- evcharger-app/i18n/qml_fi.ts | 3596 +++++++++++++++++ evcharger-app/i18n/qml_nb.ts | 3596 +++++++++++++++++ evcharger-app/i18n/qml_sv.ts | 3596 +++++++++++++++++ evcharger-app/i18n/qml_tr.ts | 3596 +++++++++++++++++ evcharger-app/main.cpp | 52 +- evcharger-app/qml/ApiStatusRow.qml | 8 +- evcharger-app/qml/AppSettingsPage.qml | 7 + evcharger-app/qml/AppTheme.qml | 11 + evcharger-app/qml/BaseNavigationPage.qml | 13 +- evcharger-app/qml/CloudPage.qml | 77 +- evcharger-app/qml/ConfirmingOnOffSwitch.qml | 4 - evcharger-app/qml/EVChargerApp.qml | 163 +- evcharger-app/qml/EditValueItem.qml | 3 +- evcharger-app/qml/EthernetPage.qml | 102 +- evcharger-app/qml/GeneralOnOffSwitch.qml | 4 - evcharger-app/qml/HotspotPage.qml | 43 +- evcharger-app/qml/LanguageSelector.qml | 130 + evcharger-app/qml/MqttPage.qml | 111 +- evcharger-app/qml/SettingsCard.qml | 14 + evcharger-app/qml/SettingsLabel.qml | 8 + evcharger-app/qml/SettingsSectionLabel.qml | 12 + evcharger-app/qml/SwitchLanguagePage.qml | 5 +- evcharger-app/qml/WhiteBox.qml | 9 +- evcharger-app/qml/WhiteCheckDelegate.qml | 18 +- evcharger-app/qml/WhiteItemDelegate.qml | 13 +- evcharger-app/qml/WhiteSwipeDelegate.qml | 10 +- evcharger-app/qml/WiFiPage.qml | 219 +- evcharger-app/qml/flags/de.svg | 5 + evcharger-app/qml/flags/fi.svg | 4 + evcharger-app/qml/flags/gb.svg | 7 + evcharger-app/qml/flags/no.svg | 5 + evcharger-app/qml/flags/se.svg | 4 + evcharger-app/qml/flags/system.svg | 4 + evcharger-app/qml/flags/tr.svg | 6 + .../qml/material-icons/arrow_back.svg | 1 + 39 files changed, 16751 insertions(+), 1210 deletions(-) create mode 100644 evcharger-app/i18n/qml_fi.ts create mode 100644 evcharger-app/i18n/qml_nb.ts create mode 100644 evcharger-app/i18n/qml_sv.ts create mode 100644 evcharger-app/i18n/qml_tr.ts create mode 100644 evcharger-app/qml/AppTheme.qml create mode 100644 evcharger-app/qml/LanguageSelector.qml create mode 100644 evcharger-app/qml/SettingsCard.qml create mode 100644 evcharger-app/qml/SettingsLabel.qml create mode 100644 evcharger-app/qml/SettingsSectionLabel.qml create mode 100644 evcharger-app/qml/flags/de.svg create mode 100644 evcharger-app/qml/flags/fi.svg create mode 100644 evcharger-app/qml/flags/gb.svg create mode 100644 evcharger-app/qml/flags/no.svg create mode 100644 evcharger-app/qml/flags/se.svg create mode 100644 evcharger-app/qml/flags/system.svg create mode 100644 evcharger-app/qml/flags/tr.svg create mode 100644 evcharger-app/qml/material-icons/arrow_back.svg diff --git a/evcharger-app/CMakeLists.txt b/evcharger-app/CMakeLists.txt index b6f8225..d4a06a0 100644 --- a/evcharger-app/CMakeLists.txt +++ b/evcharger-app/CMakeLists.txt @@ -1,6 +1,6 @@ find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Quick WebSockets LinguistTools Charts) -qt_standard_project_setup(REQUIRES 6.6 I18N_TRANSLATED_LANGUAGES de) +qt_standard_project_setup(REQUIRES 6.6 I18N_TRANSLATED_LANGUAGES de sv fi nb tr) qt_add_executable(evcharger-app WIN32 MACOSX_BUNDLE appsettings.cpp @@ -50,6 +50,8 @@ if (ANDROID) ) endif() +set_source_files_properties(qml/AppTheme.qml qml/Constants.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE) + qt_add_qml_module(evcharger-app URI EVChargerApp VERSION 1.0 @@ -65,6 +67,7 @@ qt_add_qml_module(evcharger-app qml/ApiSettingsPage.qml qml/AppInstance.qml qml/AppSettingsPage.qml + qml/AppTheme.qml qml/BaseNavigationPage.qml qml/CablePage.qml qml/CarPage.qml @@ -106,6 +109,7 @@ qt_add_qml_module(evcharger-app qml/InformationsTabPage.qml qml/InformationChartPanel.qml qml/KwhLimitPage.qml + qml/LanguageSelector.qml qml/LedPage.qml qml/LicensesPage.qml qml/LoadBalancingPage.qml @@ -131,6 +135,9 @@ qt_add_qml_module(evcharger-app qml/SelectPhaseSwitchModeItem.qml qml/SendMessageButton.qml qml/SensorsConfigurationPage.qml + qml/SettingsCard.qml + qml/SettingsLabel.qml + qml/SettingsSectionLabel.qml qml/SetPriceLimitPage.qml qml/SettingsTabPage.qml qml/SetValueHelper.qml @@ -166,14 +173,20 @@ qt_add_qml_module(evcharger-app qml/images/geminiFix.png qml/js/qrcode.min.js qml/material-icons/add.svg + qml/material-icons/arrow_back.svg qml/material-icons/grid_guides.svg qml/material-icons/open_in_new.svg qml/material-icons/settings.svg + qml/flags/de.svg + qml/flags/fi.svg + qml/flags/gb.svg + qml/flags/no.svg + qml/flags/se.svg + qml/flags/system.svg + qml/flags/tr.svg qml/ui-icons/MaterialIcons-Regular.ttf ) -set_source_files_properties(qml/Constants.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE) - target_link_libraries(evcharger-app PUBLIC Qt6::Core Qt6::Gui diff --git a/evcharger-app/appsettings.cpp b/evcharger-app/appsettings.cpp index fbf691c..fdaa1fb 100644 --- a/evcharger-app/appsettings.cpp +++ b/evcharger-app/appsettings.cpp @@ -3,6 +3,49 @@ #include #include +QLocale::Language AppSettings::uiLanguage() const +{ + const QVariant storedLanguage = value("uiLanguage"); + bool isNumber = false; + const int language = storedLanguage.toInt(&isNumber); + + if (isNumber && language >= QLocale::AnyLanguage && language <= QLocale::LastLanguage) + return static_cast(language); + + // Also understand string values written by development versions. + if (storedLanguage.toString() == QStringLiteral("de")) + return QLocale::German; + if (storedLanguage.toString() == QStringLiteral("en")) + return QLocale::English; + if (storedLanguage.toString() == QStringLiteral("sv")) + return QLocale::Swedish; + if (storedLanguage.toString() == QStringLiteral("fi")) + return QLocale::Finnish; + if (storedLanguage.toString() == QStringLiteral("nb") + || storedLanguage.toString() == QStringLiteral("no")) + return QLocale::NorwegianBokmal; + if (storedLanguage.toString() == QStringLiteral("tr")) + return QLocale::Turkish; + + return QLocale::AnyLanguage; +} + +void AppSettings::setUiLanguage(QLocale::Language uiLanguage) +{ + if (uiLanguage < QLocale::AnyLanguage || uiLanguage > QLocale::LastLanguage) + return; + + if (uiLanguage == this->uiLanguage()) + return; + + if (uiLanguage == QLocale::AnyLanguage) + remove("uiLanguage"); + else + setValue("uiLanguage", static_cast(uiLanguage)); + + emit uiLanguageChanged(uiLanguage); +} + bool AppSettings::loadSolalawebKey(const QString &url) { QFile file{QQmlFile::urlToLocalFileOrQrc(url)}; diff --git a/evcharger-app/appsettings.h b/evcharger-app/appsettings.h index d0c711b..78396b1 100644 --- a/evcharger-app/appsettings.h +++ b/evcharger-app/appsettings.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include "goesettings.h" @@ -8,8 +9,26 @@ class AppSettings : public GoeSettings { Q_OBJECT QML_ELEMENT + Q_PROPERTY(QLocale::Language uiLanguage READ uiLanguage WRITE setUiLanguage NOTIFY uiLanguageChanged FINAL) public: + enum UiLanguageValue { + SystemLanguage = QLocale::AnyLanguage, + GermanLanguage = QLocale::German, + EnglishLanguage = QLocale::English, + SwedishLanguage = QLocale::Swedish, + FinnishLanguage = QLocale::Finnish, + NorwegianLanguage = QLocale::NorwegianBokmal, + TurkishLanguage = QLocale::Turkish, + }; + Q_ENUM(UiLanguageValue) + + QLocale::Language uiLanguage() const; + void setUiLanguage(QLocale::Language uiLanguage); + Q_INVOKABLE bool loadSolalawebKey(const QString &url); Q_INVOKABLE bool loadSolalawebCert(const QString &url); + +signals: + void uiLanguageChanged(QLocale::Language uiLanguage); }; diff --git a/evcharger-app/i18n/qml_de.ts b/evcharger-app/i18n/qml_de.ts index ed44160..81d1ab7 100644 --- a/evcharger-app/i18n/qml_de.ts +++ b/evcharger-app/i18n/qml_de.ts @@ -1,6 +1,6 @@ - + AboutPage @@ -26,12 +26,12 @@ Enable demo mode - + Demo Modus aktivieren Set charging color to new - + Lade-Farbe auf neu setzen @@ -81,36 +81,11 @@ - AddSerialsRangeDialog + ApiEnumEditItem - - Add serials range - - - - - From: - - - - - To: - - - - - Count: - - - - - ??? - - - - - %0 serials - + + Automatic + Automatisch @@ -211,34 +186,39 @@ App Einstellungen - + + Language + Sprache + + + Number of app instances: Anzahl an App Instanzen: - + solalaweb key: solalaweb key: - - + + Select... Auswählen... - - + + Replace... Ersetzen... - + solalaweb cert: solalaweb cert: - + Show solalaweb: Zeige solalaweb: @@ -246,10 +226,15 @@ BaseNavigationPage - + Back Zurück + + + Return to the previous screen + Zu vorherigem Bildschirm zurückwechseln + CablePage @@ -270,84 +255,367 @@ CellularPage - + Cellular Mobilfunk - + + No service + Kein Service + + + + GSM + GSM + + + + GPRS + GPRS + + + + EDGE + EDGE + + + + WCDMA + WCDMA + + + + HSDPA + HSDPA + + + + HSUPA + HSUPA + + + + HSPA + HSPA + + + + LTE + LTE + + + + Disconnected + Getrennt + + + + Unavailable + Nicht verfügbar + + + + Cellular on + Mobilfunk an + + + + Cellular off + Mobilfunk aus + + + Are you sure? Sind Sie sicher? - - Disabling Cellular could make your device unreachable from the cloud! - Wenn die Mobilfunkverbindung ausgeschaltet wird, kann Ihr Gerät unerreichbar werden, wenn die App über Mobilfunk verbunden ist! + + Disabling cellular could make your device unreachable from the cloud! + Mobilfunk auszuschalten kann das Gerät aus der Cloud unerreichbar machen! - + + Mobile network + Mobilfunknetzwerk + + + + Connection + Verbindung + + + + Operator + Betreiber + + + + No operator + Kein Betreiber + + + + Signal + Signal + + + + IP address + IP Addresse + + + + + No address + Keine Addresse + + + + Connection settings + Verbindungseinstellungen + + + + Access point name + Zugriffspunktsname + + + + SIM + SIM + + + + Embedded SIM + Eingebettete SIM + + + + SIM card slot + SIM-Karten Slot + + + + SIM PIN + SIM PIN + + + + + Configured + Konfiguriert + + + + + Not configured + Nicht konfiguriert + + + + Enter a new PIN + Einen neuen PIN eingeben + + + + Preferred network + Bevorzugtes Netzwerk + + + + + Automatic + Automatisch + + + + 2G only + Nur 2G + + + + 4G only + Nur 4G + + + + Authentication + Authentifizierung + + + + None + Kein + + + + PAP + PAP + + + + CHAP + CHAP + + + + MSCHAP + MSCHAP + + + + MSCHAP v2 + MSCHAP v2 + + + + EAP + EAP + + + + Enter a new password + Neues Passwort eingeben + + + + Forced operator + Erzwungener Betreiber + + + + Automatic when empty + Automatisch wenn leer + + + + Hide modem details + Modem-Details verstecken + + + + Show modem details + Modem-Details anzeigen + + + + Modem details + Modem Details + + + + Initialization + Initialisierung + + + + SIM status + SIM Status + + + + IMEI + IMEI + + + + IMSI + IMSI + + + + ICCID + ICCID + + + + Operator selection + Betreiber Auswahl + + + + Startup commands + Hochfahr-Kommandos + + + + Addressing + Addressierung + + + + Not connected + Nicht verbunden + + + + subnet %1 + Subnet %1 + + + + gateway %1 + Gateway %1 + + + Disabling Cellular could make your device unreachable from the cloud! + Wenn die Mobilfunkverbindung ausgeschaltet wird, kann Ihr Gerät unerreichbar werden, wenn die App über Mobilfunk verbunden ist! + + + APN APN - PIN - PIN + PIN - + Username Benutzername - + Password Passwort - Show technical details of LTE modem - Technische Informationen des LTE Modems anzeigen + Technische Informationen des LTE Modems anzeigen - Initialization status: - Initialisierungsstatus: + Initialisierungsstatus: - IMEI: - IMEI: + IMEI: - IMSI: - IMSI: + IMSI: - Pin status: - Pin Status: + Pin Status: - Operator name: - Netzbetreibername: + Netzbetreibername: - Signal quality: - Signalstärke: + Signalstärke: - Current system mode: - Aktuelle Verbindungsart: + Aktuelle Verbindungsart: - IP Address: - IP Adresse: + IP Adresse: @@ -629,38 +897,66 @@ - Disabling could connection could make your device unreachable from other places than home! - Wenn die Cloud-Verbindung ausgeschaltet wird, kann Ihr Gerät unerreichbar werden, wenn Sie sich nicht zuhause im Heimnetzwerk befinden! + Disabling the cloud connection could make your device unreachable from outside your home network! + - Features like flexible energy tariffs, time sync and app connection are unavilable when "Enable cloud connection" is disabled - Wenn "Cloud Verbindung aktivieren" deaktiviert ist, sind Funktionen wie flexible Energietarife, Zeitsynchronisierung und App-Verbindung über das Internet nicht möglich + Features such as flexible energy tariffs, time synchronization, and remote app access are unavailable when the cloud connection is disabled. + + + + + Trying to connect + + Connected + Verbunden + + + + Hello received + + + + + Cloud queue size + + + + + Last error + + + + Disabling could connection could make your device unreachable from other places than home! + Wenn die Cloud-Verbindung ausgeschaltet wird, kann Ihr Gerät unerreichbar werden, wenn Sie sich nicht zuhause im Heimnetzwerk befinden! + + + Features like flexible energy tariffs, time sync and app connection are unavilable when "Enable cloud connection" is disabled + Wenn "Cloud Verbindung aktivieren" deaktiviert ist, sind Funktionen wie flexible Energietarife, Zeitsynchronisierung und App-Verbindung über das Internet nicht möglich + + Trying to connect: - Versuche zu verbinden: + Versuche zu verbinden: - Is connected: - Ist verbunden: + Ist verbunden: - Hello received: - Hallo empfangen: + Hallo empfangen: - Queue size cloud: - Cloud Warteschlagengröße: + Cloud Warteschlagengröße: - Last error: - Letzer Fehler: + Letzer Fehler: @@ -694,17 +990,17 @@ ConfirmingOnOffSwitch - + On An - + Off Aus - + Unknown Unbekannt @@ -735,37 +1031,57 @@ WLAN - + + Join and manage wireless networks + + + + + Configure the device's Wi-Fi access point + + + + + Wired network and IP settings + + + + Cellular Mobilfunk - + Hotspot Hotspot - + Ethernet Ethernet - + + SIM, APN and mobile network settings + + + + OCPP OCPP - + Cloud Cloud - + MQTT MQTT - + API Settings API Einstellungen @@ -830,212 +1146,227 @@ Unbekannt - + Connecting to %0 Verbinde zu %0 - + Received something that is not a json object! - + Received something that does not contain a type! - + Received something with a non-string type! - + Received hello without serial! - + Received hello with a non-string serial! - + Received hello with a non-bool secured! - + Received hello without manufacturer! - + Received hello with a non-string manufacturer! - + Received hello without friendly_name! - + Received hello with a non-string friendly_name! - + Received hello without devicetype! - + Could not parse solalaweb certificate! - + Could not parse solalaweb key! - + Received hello with a non-string devicetype! - + Received authRequired without token1! - + Received authRequired with a non-string token1! - + Received authRequired without token2! - + Received authRequired with a non-string token2! - + Received fullStatus with a non-bool partial! - + Received fullStatus without a status! - + Received fullStatus with a non-object status! - + Received partial fullStatus - + Received last fullStatus - + Received deltaStatus without a status! - + Received deltaStatus with a non-object status! - + Received message type %0 %1 - + + Received authRequired with a non-string hash algorithm! + + + + + Received authRequired with unsupported hash algorithm %0! + + + + Received message with a non-string requestId! - + Sending %0 - + + Could not derive bcrypt authentication hash! + + + + Connected! Verbunden! - + Disconnected! Verbindung verloren! - + Reconnecting to %0 Verbinde wieder zu %0 - + state changed: %0 - + could not parse received json: %0 at offset %1 - + unknown binary message type %0 received - + error occured: %0 - + ssl peer verify error - + ssl errors - + ssl alert sent level=%0 type=%1 description=%2 - + ssl alert received level=%0 type=%1 description=%2 - + ssl handshake interrupted on error - + unknown response type %0 @@ -1202,183 +1533,8 @@ Verbindung schwer gestört - - DeviceConnection - - - - Unknown - Unbekannt - - - - Ok - - - - - Offline - - - - - - Idle - - - - - Updating - - - - - Failed - - - - - Succeeded - - - - - NotReady - - - - - Verifying - - - - - %0 %1% - - - - - %0 %1/? - - - - - %0 ?/%1 - - - - - Charging - - - - - WaitCar - - - - - Complete - - - - - Error - - - DevicesModel - - - Serial - - - - - WS Status - - - - - Status - - - - - Variant - - - - - IsGo - - - - - IsAustralien - - - - - ResetCard - - - - - ConnectedWifi - - - - - Project - - - - - Version - - - - - IDF Version - - - - - Update - - - - - Reboots - - - - - Uptime - - - - - Current Partition - - - - - Car state - - - - - Energy - - - - - Livedata - - @@ -1394,6 +1550,39 @@ Display + + DurationEditItem + + + %1 h + + + + + %1 min + + + + + %1 s + + + + + Hours + + + + + Minutes + + + + + Seconds + + + EVChargerApp @@ -1444,10 +1633,141 @@ EthernetPage - + Ethernet Ethernet + + + Not connected + Nicht verbunden + + + + Connected + Verbunden + + + + No link + + + + + Unknown speed + + + + + full duplex + + + + + half duplex + + + + + Ethernet on + + + + + Ethernet off + + + + + Connection + Verbindung + + + + Address + + + + + Link + + + + + + Gateway + + + + + IPv4 configuration + + + + + Static IP address + + + + + Automatic IP address (DHCP) + + + + + IP address + IP Addresse + + + + Subnet mask + + + + + Static DNS servers + + + + + Automatic DNS servers + + + + + Primary DNS + + + + + Secondary DNS + + + + + Additional DNS + + + + + Interface details + + + + + Hostname + + + + + MAC address + + + + + Initialization + Initialisierung + FirmwarePage @@ -1510,25 +1830,173 @@ FlexibleEnergyTariffPage - + Flexible energy tariff Flexibler Energietarif - - - Charge with flexible energy tariff - Laden mit flexiblen Stromtarif + + ct/kWh + - + + %1 %2 + + + + + No current price period available + + + + + %1–%2 + + + + + Could not load the tariff catalog (HTTP %1). + + + + + The tariff catalog contains invalid data: %1 + + + + + %1 (%2 min) + + + + + Charge when electricity is below your price limit. The charger downloads prices for the selected tariff and plans charging for the cheapest periods. + + + + + + Flexible tariff charging on + + + + + + Flexible tariff charging off + + + + + Selected tariff + + + + + Tariff ID %1 + + + + + %1 • %2 + + + + + Electricity prices + + + + + Current price + + + + + Upcoming prices (%1 available) + + + + + Price forecast (%1) + + + + + + + Tariff + + + + + Prices available until %1 + + + + + Lowest + + + + + Highest + + + + + No future prices have been received from the charger yet. + + + + + Tariff selection + + + + + Loading available tariffs… + + + + + Try again + + + + + Country + + + + + Provider + + + + + This tariff publishes prices every 15 minutes. It requires charger firmware 60.0 or newer. + + + + + Save tariff + + + + Charge with flexible energy tariff + Laden mit flexiblen Stromtarif + + + + + Price limit Preisgrenze - %0 ct/kWh - %0 ct/kWh + %0 ct/kWh @@ -1541,17 +2009,17 @@ GeneralOnOffSwitch - + On An - + Off Aus - + Unknown Unbekannt @@ -1646,150 +2114,148 @@ HotspotPage - + Hotspot Hotspot - Disable AP when online - AP ausschalten wenn online + AP ausschalten wenn online - + + Hotspot on + + + + + Hotspot off + + + + + Configuration + + + + + Turn hotspot off when another internet connection is available + + + + SSID SSID - + + Hotspot name + + + + Password Passwort - + + Custom password + + + + + Default password + + + + + Unknown + Unbekannt + + + + Enter a new password + Neues Passwort eingeben + + + + Security + Sicherheit + + + + Open + + + + + WPA + + + + + WPA2 + + + + + WPA/WPA2 + + + + + WPA3 + + + + + WPA2/WPA3 + + + + Channel Kanal + + + Hotspot identity + + + + + Hostname + + + + + MAC address + + - ImportCertificateDialog + InformationChartPanel - - Import Certificate + + + Value - - Supports Ssl: + + Information - - - - TextLabel + + %1 (%2) - - Ssl Library Version: - - - - - Ssl Library Build Version: - - - - - Ssl Backend: - - - - - Automatic Import: - - - - - Load p12 file... - - - - - Private Key: - - - - - Private Cert: - - - - - Warning: Your private key and cert will be stored on this machine, but can later be erased from the main window. - - - - - Yes - - - - - No - - - - - Select certificate... - - - - - Could not open file! - - - - - Please enter password - - - - - Certificate password: - - - - - Failed to load openssl legacy provider! - - - - - - - Failed processing certificate! - - - - - Possible reasons: openssl has a problem, the file is corrupt/invalid or the password is incorrect. - - - - - The key seems to be invalid. - - - - - The cert seems to be invalid. - - - - - Could not change active backend + + + + %1 %2 @@ -1797,31 +2263,56 @@ InformationsTabPage + Category %1 + + + + Informations Informationen - + Idle - + HEADERS_RECEIVED - + LOADING - + + %1 images + + + + + %1 charts + + + + + Loaded %1 + + + + + No information data received + + + + Request started... - + Download informations Informationen herunterladen @@ -1834,6 +2325,60 @@ kWh Limit + + LanguageSelector + + + System default (%1) + Systemeinstellung (%1) + + + + + German + Deutsch + + + + + Swedish + Schwedisch + + + + + Finnish + Finnisch + + + + + Norwegian + Norwegisch + + + + + Turkish + Türkisch + + + + + English + Englisch + + + + App language + App-Sprache + + + + Numbers, dates, and times continue to use your system settings. + Zahlen, Datumsangaben und Uhrzeiten verwenden weiterhin die Systemeinstellungen. + + LedPage @@ -1908,179 +2453,8 @@ MainWindow - - MainWindow - - - - - Connect All - - - - - Disconnect All - - - - - Add - - - - - Remove - - - - - Add range - - - - - Serial - - - - - Error while adding serial! - - - - - Error while adding! - - - - - %0 rows could not be adding! - - - - - %0 selected - - - - - Add new column... - - - - - Remove column %0 - - - - - Enter api key - - - - - Api key: - - - - - Set update url... - - - - - Start update... - - - - - Reboot... - - - - - Set chargectrl override... - - - - - Set abitrary api key... - - - - - Reset nvs key... - - - - - Open app(s)... - - - - - Remove... - - - - - Enter update url... - - - - - Update url: - - - - - Select update release... - - - - - Update release - - - - Are you sure? - Sind Sie sicher? - - - - Do you really want to reboot selected devices? - - - - - Please input nvs key to be reset - - - - - Nvs key - - - - - Confirm deletion of devices - - - - - Do you really want to remove %0 devices? - - - - - Error while removing! - - - - - %0 rows could not be removed! - + Sind Sie sicher? @@ -2091,9 +2465,13 @@ MQTT - Broker url - Broker url + Broker url + + + + Broker URL + @@ -2106,69 +2484,117 @@ https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-de.md - - Trying to connect: - Versuche zu verbinden: + + Trying to connect + - - Is connected: - Ist verbunden: + + Connected + Verbunden + + + + Connected since + + + + + Command counter + - Connected since: - Verbunden seit: + Last error + - - Command Counter: - Befehlszähler: + + Last error age + + + + + Use global CA certificate store + - Last error: - Letzer Fehler: + Skip certificate common name check + - - Last error age: - Alter des letzten Fehlers: + + Skip server certificate verification + - - Use global CA store - Verwende den global CA Store + + MQTT read-only + + Home Assistant auto-discovery + + + + + Home Assistant topic prefix + + + + Trying to connect: + Versuche zu verbinden: + + + Is connected: + Ist verbunden: + + + Connected since: + Verbunden seit: + + + Command Counter: + Befehlszähler: + + + Last error: + Letzer Fehler: + + + Last error age: + Alter des letzten Fehlers: + + + Use global CA store + Verwende den global CA Store + + Skip cert commonName check - commonName Überprüfung überspringen + commonName Überprüfung überspringen - Skip server cert verification - Server Zertifikat Überprüfung überspringen + Server Zertifikat Überprüfung überspringen - MQTT readonly - MQTT nur-lesend + MQTT nur-lesend - + Topic prefix Topic prefix - Homeassistant autodiscover - Homeassistant autodiscover + Homeassistant autodiscover - Homeassistant topic prefix - Homeassistant topic prefix + Homeassistant topic prefix @@ -2295,7 +2721,7 @@ Unavailable - + Nicht verfügbar @@ -2318,52 +2744,53 @@ Server Zertifikat Überprüfung überspringen - + Heartbeat interval: Heartbeat Intervall: - + MeterValues sample interval: MeterValues Sample Intervall: - + Clock aligned data interval: Clock Aligned Data Intervall: - + Dummy card id Dummy Karten-ID - + Rotate phases on charger Phasen am Charger rotieren - + Allow Offline Tx For UnknownId - + Local Authorize Offline - + Local Auth List Enabled - + + Accept time from backend - + Set as inoperable Als Unverfügbar setzen @@ -2379,14 +2806,153 @@ PvSurplusPage - PV Surplus - PV-Überschuss + PV-Überschuss - Charging with PV surplus - Laden mit PV-Überschuss + Laden mit PV-Überschuss + + + + PV surplus + + + + + %1 W + + + + + PV surplus charging on + + + + + PV surplus charging off + + + + + Charging behavior + + + + + Choose when surplus charging starts, stops, and how closely it follows the available power. + + + + + Surplus required to start + + + + + Surplus must be available for + + + + + + Allow charging to pause when surplus is insufficient + + + + + Minimum charging time before a pause + + + + + Power adjustment + + + + + Prefer power from grid + + + + + Round to nearest ampere + + + + + Prefer power to grid + + + + + Recalculate from current surplus after a long interruption + + + + + Phase switching + Phasen wechseln + + + + Automatic switching can use one phase at low surplus and three phases at higher power. + + + + + Switch to three phases above + + + + + New phase request must remain valid for + + + + + Minimum time between phase switches + + + + + Phase-switch hysteresis + + + + + Grid target and advanced tuning + + + + + These values fine-tune whether a small amount of power is imported from or exported to the grid. + + + + + Grid power target + + + + + Zero feed-in mode + + + + + Zero feed-in offset + + + + + Grid priority offset + + + + + Stop hysteresis + @@ -2397,52 +2963,6 @@ Neustart - - RequestDialog - - - Pending requests... - - - - - RequestModel - - - Pending - - - - - Failed - - - - - Succeeded - - - - - Serial - - - - - RequestId - - - - - Status - - - - - Message - - - SavedDevicesModel @@ -2656,54 +3176,6 @@ Sensorkonfiguration - - SetArbitraryApiKeyDialog - - - Dialog - - - - - ApiKey: - - - - - Value: - - - - - Sudo: - - - - - Enabled - - - - - Could not parse JSON - - - - - Unexpected not array! - - - - - Unexpected array length! - - - - - Unexpected array length: %0! - - - SetPriceLimitPage @@ -2722,7 +3194,7 @@ Preisgrenze - + %0 ct/kWh %0 ct/kWh @@ -3023,83 +3495,441 @@ WiFiPage - + Wi-Fi WLAN - - Are you sure? - Sind Sie sicher? - - - - Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud! - Wenn die WLAN-Verbindung ausgeschaltet wird, kann Ihr Gerät im Heimnetzwerk und über die Cloud unerreichbar werden! - - - - Status: - Status: - - - - Scan-Status: + + Open - - Scan-Age: + + WEP + + + + + WPA + + + + + WPA2 + + + + + WPA/WPA2 + + + + + WPA2 Enterprise - Trigger scan + WPA3 - - (%0) Scan Result + + WPA2/WPA3 + + + WAPI + + + + + OWE + + + + + WPA3 Enterprise + + + + + WPA3 External PSK + + + + + WPA3 External PSK mixed + + + + + Unknown security + + + + + + Idle + + + + + Network not found + + + + + Scan completed + + + + + + Connected + Verbunden + + + + Connection failed + + + + + Connection lost + + + + + Disconnected + Getrennt + + + + + Connecting + + + + + Disconnecting + + + + + Wi-Fi unavailable + + + + + Waiting for IP address + + + + + + + Unknown + Unbekannt + + + + Not scanned yet + + + + + + Scanning + + + + + Finished + + + + + Failed + + + + + The Wi-Fi configuration has not been received yet. + + + + + All Wi-Fi configuration slots are occupied. Delete a configured network first. + + + + + Are you sure? + Sind Sie sicher? + + + + Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud! + Wenn die WLAN-Verbindung ausgeschaltet wird, kann Ihr Gerät im Heimnetzwerk und über die Cloud unerreichbar werden! + + + + Connection + Verbindung + + + + Status + + + + + Network + + + + + Not connected + Nicht verbunden + + + + Unknown network + + + + + Signal + Signal + + + + Wi-Fi scan + + + + + Last scan + + + + + Never + + + + + Configured networks + + + + + Scanning… + + + + + Scan again + + + + + No configured networks + + + + + Static IP %1 + + + + + Automatic IP + + + + + Custom password + + + + + Default password + + + + + slot %1 + + + + + Delete + Löschen + + + + Available networks + + + + + Saved • %1 + + + + + Signal strength %1 dBm + + + + + No networks found. Start another scan. + + + + + Support protected management frames + + + + + Require protected management frames + + + + + Technical details + + + + + Addressing + Addressierung + + + + IP %1 + + + + + mask %1 + + + + + gateway %1 + Gateway %1 + + + + Access point + + + + + channel %1 + + + + + Connection process + + + + + MAC address + + + + + Hostname + + + + + Connection errors + + + + + Connect to Wi-Fi + + + + + Password + Passwort + + + + Show password + + + + + The password must contain at least 8 characters. + + + + + This network does not require a password. + + + + + The network will be saved in slot %1. + + + + + Delete Wi-Fi network? + + + + + Delete %1 and all of its IP and DNS settings? + + + + + Cannot add Wi-Fi network + + + + Status: + Status: + (%0) Wi-Fi Scan (%0) Wi-Fi Scan - + (%0) Wi-Fi Errors (%0) WLAN Probleme - + + Advanced Wi-Fi settings + + + + Min RSSI Min RSSI - Pmf capable - Pmf fähig + Pmf fähig - Pmf required - Pmf erforderlich - - - - main - - - - Could not parse private key! - - - - - - Could not parse private cert! - + Pmf erforderlich diff --git a/evcharger-app/i18n/qml_fi.ts b/evcharger-app/i18n/qml_fi.ts new file mode 100644 index 0000000..b827be2 --- /dev/null +++ b/evcharger-app/i18n/qml_fi.ts @@ -0,0 +1,3596 @@ + + + + + AboutPage + + + About + Tietoja + + + + Firmware + Laiteohjelmisto + + + + Hardware information + Laitteiston tiedot + + + + Licenses + Lisenssit + + + + Enable demo mode + Ota esittelytila käyttöön + + + + Set charging color to new + Aseta latausväri uuteen + + + + AccessPage + + + Access + Kulunvalvonta + + + + AddDeviceScreen + + + Setup or add device + Asenna tai lisää laite + + + + Add via local connection or AP: + Lisää paikallisen yhteyden tai tukiaseman kautta: + + + + Local url + Paikallinen url + + + + + Connect + Yhdistä + + + + Add via cloud: + Lisää pilven kautta: + + + + Cloud Serial + Pilvi-sarja + + + + ApiEnumEditItem + + + Automatic + Automaattinen + + + + ApiSettingsPage + + + API Settings + API-asetukset + + + + Allow access to local HTTP-Api v2 + Salli pääsy paikalliseen HTTP-Api v2:een + + + + + + + API documentation + API-dokumentaatio + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + + + + Generate token + Luo tunnus + + + + OK! token: %0 + OK! tunnus: %0 + + + + Clear API token + Tyhjennä API-tunnus + + + + Enable cloud API + Ota pilvisovellusliittymä käyttöön + + + + + API key: %0 + API-avain: %0 + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + + + + 3rdparty integrations (QR-Code) + Kolmannen osapuolen integraatiot (QR-koodi) + + + + Enable grid API + Ota sähköverkko-API käyttöön + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + + + + Allow access to legacy HTTP-Api v1 + Salli vanhan HTTP-Api v1:n käyttö + + + + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + + + + AppSettingsPage + + + App Settings + Sovellusasetukset + + + + Language + Kieli + + + + Number of app instances: + Sovellusesiintymien määrä: + + + + solalaweb key: + solalaweb avain: + + + + + Select... + Valitse... + + + + + Replace... + Korvaa... + + + + solalaweb cert: + solalaweb-sertifikaatti: + + + + Show solalaweb: + Näytä solalaweb: + + + + BaseNavigationPage + + + Back + Takaisin + + + + Return to the previous screen + Palaa edelliseen näyttöön + + + + CablePage + + + Cable + Kaapeli + + + + CarPage + + + Car + Auto + + + + CellularPage + + + Cellular + Mobiiliverkko + + + + No service + Ei palvelua + + + + GSM + GSM + + + + GPRS + GPRS + + + + EDGE + EDGE + + + + WCDMA + WCDMA + + + + HSDPA + HSDPA + + + + HSUPA + HSUPA + + + + HSPA + HSPA + + + + LTE + LTE + + + + Disconnected + Yhteys katkaistu + + + + Unavailable + Ei saatavilla + + + + Cellular on + Matkapuhelin päällä + + + + Cellular off + Mobiili pois päältä + + + + Are you sure? + Oletko varma? + + + + Disabling cellular could make your device unreachable from the cloud! + Mobiiliyhteyden poistaminen käytöstä voi tehdä laitteestasi tavoittamattoman pilvestä! + + + + Mobile network + Mobiiliverkko + + + + Connection + Yhteys + + + + Operator + Operaattori + + + + No operator + Ei operaattoria + + + + Signal + Signaali + + + + IP address + IP-osoite + + + + + No address + Ei osoitetta + + + + Connection settings + Yhteysasetukset + + + + APN + APN + + + + Access point name + Tukiaseman nimi + + + + SIM + SIM + + + + Embedded SIM + Sisäänrakennettu SIM + + + + SIM card slot + SIM-korttipaikka + + + + SIM PIN + SIM-kortin PIN-koodi + + + + + Configured + Määritetty + + + + + Not configured + Ei määritetty + + + + Enter a new PIN + Anna uusi PIN-koodi + + + + Preferred network + Ensisijainen verkko + + + + + Automatic + Automaattinen + + + + 2G only + vain 2G + + + + 4G only + vain 4G + + + + Authentication + Todennus + + + + None + Ei mitään + + + + PAP + PAP + + + + CHAP + CHAP + + + + MSCHAP + MSCHAP + + + + MSCHAP v2 + MSCHAP v2 + + + + EAP + EAP + + + + Username + Käyttäjätunnus + + + + Password + Salasana + + + + Enter a new password + Anna uusi salasana + + + + Forced operator + Pakkooperaattori + + + + Automatic when empty + Automaattinen tyhjänä + + + + Hide modem details + Piilota modeemin tiedot + + + + Show modem details + Näytä modeemin tiedot + + + + Modem details + Modeemin tiedot + + + + Initialization + Alustus + + + + SIM status + SIM-kortin tila + + + + IMEI + IMEI + + + + IMSI + IMSI + + + + ICCID + ICCID + + + + Operator selection + Operaattorin valinta + + + + Startup commands + Käynnistyskomennot + + + + Addressing + Osoittaminen + + + + Not connected + Ei yhdistetty + + + + subnet %1 + aliverkko %1 + + + + gateway %1 + yhdyskäytävä %1 + + + + ChargerTabPage + + + Internal error + Sisäinen virhe + + + + No car connected + Ei autoa kytketty + + + + Car is charging + Auto latautuu + + + + Connecting to your car... + Yhdistetään autoosi... + + + + Charging completed + Lataus valmis + + + + Unknown error %0 + Tuntematon virhe %0 + + + + Plug in the cable to start charging your car + Liitä kaapeli aloittaaksesi auton lataamisen + + + + Duration: %0 + Kesto: %0 + + + + Speed: %0 + Nopeus: %0 + + + + Amount: %0 + Määrä: %0 + + + + Charger is connecting to your car, it usually takes a few seconds + Laturi yhdistetään autoosi, kestää yleensä muutaman sekunnin + + + + Let's go-e :) + Let's go-e :) + + + + (api key doesnt exist) + (api-avainta ei ole olemassa) + + + + (api key is null) + (api-avain on tyhjä) + + + + (api key is not an object) + (api-avain ei ole objekti) + + + + (api key does not contain a type) + (api-avain ei sisällä tyyppiä) + + + + (api key has unknown type %0) + (api-avaimella on tuntematon tyyppi %0) + + + + %0 %1 %2 + %0 %1 %2 + + + + + + %0 A + %0 A + + + + %0 kWh + %0 kWh + + + + Price limit + Hintaraja + + + + %0 ct/kWh + %0 ct/kWh + + + + Daily trip + Päivittäinen matka + + + + By %0 with %1 + Tekijä: %0 ja %1 + + + + %0 km + %0 km + + + + Charging speed + Latausnopeus + + + + %0 & %1 + %0 & %1 + + + + %0 Ampere + %0 ampeeri + + + + Automatic phase selection + Automaattinen vaiheen valinta + + + + 1-phase + 1-vaiheinen + + + + 3-phase + 3-vaiheinen + + + + Unknown phase selection (%0) + Tuntematon vaihevalinta (%0) + + + + ChargingConfigurationPage + + + Charging configuration + Latauskokoonpano + + + + Charging Speed + Latausnopeus + + + + kWh Limit + kWh Raja + + + + Daily Trip + Päivittäinen matka + + + + Flexible energy tariff + Joustava energiatariffi + + + + PV Surplus + PV-ylijäämä + + + + Load Balancing + Kuorman tasapainotus + + + + Scheduler + Ajastin + + + + Current Levels + Virtatasot + + + + Car + Auto + + + + ChargingSpeedPage + + + Charging Speed + Latausnopeus + + + + CloudApiQrCodePage + + + 3rdparty integrations + Kolmannen osapuolen integraatiot + + + + https://device.go-e.io/%0?t=%1 + https://device.go-e.io/%0?t=%1 + + + + Open integrations page + Avaa integraatiosivu + + + + CloudPage + + + Cloud + Pilvi + + + + Enable cloud connection + Ota pilviyhteys käyttöön + + + + Are you sure? + Oletko varma? + + + + Disabling the cloud connection could make your device unreachable from outside your home network! + Pilviyhteyden poistaminen käytöstä voi tehdä laitteeseesi tavoittamattoman kotiverkkosi ulkopuolelta! + + + + Features such as flexible energy tariffs, time synchronization, and remote app access are unavailable when the cloud connection is disabled. + Ominaisuudet, kuten joustavat energiatariffit, ajan synkronointi ja sovellusten etäkäyttö, eivät ole käytettävissä, kun pilviyhteys on poistettu käytöstä. + + + + Trying to connect + Yritetään muodostaa yhteyttä + + + + Connected + Yhdistetty + + + + Hello received + Tervehdys vastaanotettu + + + + Cloud queue size + Pilvijonon koko + + + + Last error + Viimeinen virhe + + + + CloudUrlsModel + + + V2 + V2 + + + + Wattpilot + Wattpilot + + + + go-eCharger + go-eCharger + + + + go-eController + go-eController + + + + Solalaweb + Solalaweb + + + + ConfirmingOnOffSwitch + + + On + Päällä + + + + Off + Pois + + + + Unknown + Tuntematon + + + + ConnectingScreen + + + Trying to reach device... + Yritetään päästä laitteeseen... + + + + Cancel + Peruuta + + + + ConnectionPage + + + Connection + Yhteys + + + + Wi-Fi + Wi-Fi + + + + Join and manage wireless networks + Liity ja hallitse langattomia verkkoja + + + + Hotspot + Tukiasema + + + + Configure the device's Wi-Fi access point + Määritä laitteen Wi-Fi-tukipiste + + + + Ethernet + Ethernet + + + + Wired network and IP settings + Kiinteän verkon ja IP-asetukset + + + + Cellular + Mobiiliverkko + + + + SIM, APN and mobile network settings + SIM-, APN- ja mobiiliverkon asetukset + + + + Cloud + Pilvi + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API-asetukset + + + + ControllerPage + + + Controller + Ohjain + + + + ControllerTabPage + + + Connected + Yhdistetty + + + + %0W + %0W + + + + CurrentLevelsPage + + + Current Levels + Virtatasot + + + + DailyTripPage + + + Daily Trip + Päivittäinen matka + + + + DateAndTimePage + + + Date and time + Päivämäärä ja aika + + + + DeviceConnection + + + Connecting to %0 + Yhdistetään laitteeseen %0 + + + + Could not parse solalaweb certificate! + Solalaweb-varmennetta ei voitu jäsentää! + + + + Could not parse solalaweb key! + Solalaweb-avainta ei voitu jäsentää! + + + + Received something that is not a json object! + Vastaanotettu jotain, joka ei ole json-objekti! + + + + Received something that does not contain a type! + Sain jotain, joka ei sisällä tyyppiä! + + + + Received something with a non-string type! + Sain jotain ei-merkkijonotyyppistä! + + + + Received message type %0 %1 + Vastaanotetun viestin tyyppi %0 %1 + + + + Received hello without serial! + Vastaanotettu tervehdys ilman sarjaa! + + + + Received hello with a non-string serial! + Vastaanotettu tervehdys ei-merkkijonosarjassa! + + + + Received hello with a non-bool secured! + Vastaanotettu tervehdys ilman bool-suojattu! + + + + Received hello without manufacturer! + Vastaanotettu tervehdys ilman valmistajaa! + + + + Received hello with a non-string manufacturer! + Tervehdys ei-merkkijonovalmistajan kanssa! + + + + Received hello without devicetype! + Vastaanotettu tervehdys ilman laitetyyppiä! + + + + Received hello with a non-string devicetype! + Vastaanotettu tervehdys ei-merkkijonoisella laitetyypillä! + + + + Received hello without friendly_name! + Vastaanotettu tervehdys ilman friendly_namea! + + + + Received hello with a non-string friendly_name! + Vastaanotettu tervehdys ei-merkkijonolla friendly_name! + + + + Received authRequired without token1! + Vastaanotettiin authRequired ilman token1-arvoa! + + + + Received authRequired with a non-string token1! + Vastaanotettiin authRequired, jossa token1 ei ole merkkijono! + + + + Received authRequired without token2! + Vastaanotettiin authRequired ilman token2-arvoa! + + + + Received authRequired with a non-string token2! + Vastaanotettiin authRequired, jossa token2 ei ole merkkijono! + + + + Received authRequired with a non-string hash algorithm! + Vastaanotettiin authRequired, jossa hajautusalgoritmi ei ole merkkijono! + + + + Received authRequired with unsupported hash algorithm %0! + Vastaanotettiin authRequired, jonka hajautusalgoritmia %0 ei tueta! + + + + Received fullStatus with a non-bool partial! + Vastaanotettu fullStatus ei-bool-osiolla! + + + + Received fullStatus without a status! + Saatiin fullStatus ilman tilaa! + + + + Received fullStatus with a non-object status! + Vastaanotettu fullStatus ei-objektin tilalla! + + + + Received partial fullStatus + Vastaanotettu osittainen fullStatus + + + + Received last fullStatus + Vastaanotettu viimeksi fullStatus + + + + Received deltaStatus without a status! + Vastaanotettu deltaStatus ilman tilaa! + + + + Received deltaStatus with a non-object status! + Vastaanotettu deltaStatus ei-objektitilassa! + + + + Received message with a non-string requestId! + Vastaanotettu viesti, jossa on ei-merkkijono requestId! + + + + Sending %0 + Lähetetään %0 + + + + Could not derive bcrypt authentication hash! + Bcrypt-todennushajautetta ei voitu johtaa! + + + + Connected! + Yhdistetty! + + + + Disconnected! + Yhteys katkaistu! + + + + Reconnecting to %0 + Yhdistetään uudelleen laitteeseen %0 + + + + state changed: %0 + tila muutettu: %0 + + + + could not parse received json: %0 at offset %1 + vastaanotettua json-tiedostoa ei voitu jäsentää: %0 offsetissa %1 + + + + unknown binary message type %0 received + tuntematon binääriviestityyppi %0 vastaanotettu + + + + error occured: %0 + tapahtui virhe: %0 + + + + ssl peer verify error + ssl peer verify -virhe + + + + ssl errors + ssl-virheitä + + + + ssl alert sent level=%0 type=%1 description=%2 + ssl-hälytys lähetetty level=%0 type=%1 kuvaus=%2 + + + + ssl alert received level=%0 type=%1 description=%2 + ssl-hälytys vastaanotettu taso=%0 type=%1 kuvaus=%2 + + + + ssl handshake interrupted on error + ssl-kättely keskeytettiin virheen vuoksi + + + + unknown response type %0 + tuntematon vastaustyyppi %0 + + + + DeviceHeaderBar + + + Devices + Laitteet + + + + DeviceListScreen + + + Device list + Laiteluettelo + + + + App Settings + Sovellusasetukset + + + + My devices + Omat laitteet + + + + Found devices + Löytyi laitteita + + + + Delete + Poista + + + + Serial Number %0 + Sarjanumero %0 + + + + Manufacturer: + Valmistaja: + + + + Device Type: + Laitetyyppi: + + + + Host Name: + Isäntänimi: + + + + Ip: + IP: + + + + Local + Paikallinen + + + + Cloud + Pilvi + + + + Solala + Solala + + + + Add or setup device + Lisää tai määritä laite + + + + DeviceScreen + + + Password required + Salasana vaaditaan + + + + Password: + Salasana: + + + + Password + Salasana + + + + Authentication impossible! + Todennus mahdotonta! + + + + To use this password remotely a password has to be setup first. This can be done over the AccessPoint. + Etäkäyttöä varten salasana on ensin määritettävä. Sen voi tehdä tukiaseman kautta. + + + + Connection disturbed + Yhteys häiriintynyt + + + + DevicesModel + + + + Device %0 + Laite %0 + + + + DisplaySettingsPage + + + Display settings + Näyttöasetukset + + + + DurationEditItem + + + %1 h + %1 h + + + + %1 min + %1 min + + + + %1 s + %1 s + + + + Hours + Tuntia + + + + Minutes + Minuutit + + + + Seconds + Sekuntia + + + + EVChargerApp + + + EVcharger App + EVcharger App + + + + EcoTabPage + + + Eco + Eco + + + + + Flexible energy tariff + Joustava energiatariffi + + + + PV Surplus + PV-ylijäämä + + + + About eco + Tietoja ekosta + + + + We offer to charge your car during periods of low electricity price, If you have an electricity contract based on flexible energy tariffs. + Tarjoamme auton latausta alhaisen sähköhinnan aikoina, jos sinulla on joustaviin energiatariffiin perustuva sähkösopimus. + + + + PV surplus energy + PV-ylijäämäenergia + + + + By connecting a PV system and a controller to your charger, you can charge your EV particularly cheaply and use clean energy at the same time. + Kytkemällä laturiisi aurinkosähköjärjestelmän ja ohjaimen, voit ladata sähköautosi erityisen edullisesti ja käyttää samalla puhdasta energiaa. + + + + EthernetPage + + + Ethernet + Ethernet + + + + Not connected + Ei yhdistetty + + + + Connected + Yhdistetty + + + + No link + Ei linkkiä + + + + Unknown speed + Tuntematon nopeus + + + + full duplex + full duplex + + + + half duplex + puoliduplex + + + + Ethernet on + Ethernet päällä + + + + Ethernet off + Ethernet pois päältä + + + + Connection + Yhteys + + + + Address + Osoite + + + + Link + Linkki + + + + + Gateway + Gateway + + + + IPv4 configuration + IPv4-määritys + + + + Static IP address + Staattinen IP-osoite + + + + Automatic IP address (DHCP) + Automaattinen IP-osoite (DHCP) + + + + IP address + IP-osoite + + + + Subnet mask + Aliverkon maski + + + + Static DNS servers + Staattiset DNS-palvelimet + + + + Automatic DNS servers + Automaattiset DNS-palvelimet + + + + Primary DNS + Ensisijainen DNS + + + + Secondary DNS + Toissijainen DNS + + + + Additional DNS + Lisä DNS + + + + Interface details + Käyttöliittymän yksityiskohdat + + + + Hostname + Isäntänimi + + + + MAC address + MAC-osoite + + + + Initialization + Alustus + + + + FirmwarePage + + + Firmware + Laiteohjelmisto + + + + Running version: + Käynnissä oleva versio: + + + + Details: + Yksityiskohdat: + + + + Recommended version: + Suositeltu versio: + + + + Update: + Päivitys: + + + + Start + Aloita + + + + Abort + Keskeytä + + + + Switch partition + Vaihda osio + + + + Update status: + Päivityksen tila: + + + + Update progress: + Päivityksen edistyminen: + + + + Update message: + Päivitä viesti: + + + + FlexibleEnergyTariffPage + + + Flexible energy tariff + Joustava energiatariffi + + + + ct/kWh + ct/kWh + + + + %1 %2 + %1 %2 + + + + No current price period available + Nykyistä hintajaksoa ei ole saatavilla + + + + %1–%2 + %1–%2 + + + + Could not load the tariff catalog (HTTP %1). + Tariffiluetteloa (HTTP %1) ei voitu ladata. + + + + The tariff catalog contains invalid data: %1 + Tariffiluettelo sisältää virheellisiä tietoja: %1 + + + + %1 (%2 min) + %1 (%2 min) + + + + Charge when electricity is below your price limit. The charger downloads prices for the selected tariff and plans charging for the cheapest periods. + Lataa, kun sähkön hinta alittaa hintarajasi. Laturi hakee valitun tariffin hinnat ja ajoittaa latauksen edullisimmille ajanjaksoille. + + + + + Flexible tariff charging on + Joustavan tariffin mukainen lataus käytössä + + + + + Flexible tariff charging off + Joustavan tariffin mukainen lataus pois käytöstä + + + + + + Price limit + Hintaraja + + + + Selected tariff + Valittu tariffi + + + + Tariff ID %1 + Tariffitunnus %1 + + + + %1 • %2 + %1 • %2 + + + + Electricity prices + Sähkön hinnat + + + + Current price + Nykyinen hinta + + + + Upcoming prices (%1 available) + Tulevat hinnat (%1 saatavilla) + + + + Price forecast (%1) + Hintaennuste (%1) + + + + + + Tariff + Tariffi + + + + Prices available until %1 + Hinnat saatavilla %1 asti + + + + Lowest + Alin + + + + Highest + Korkein + + + + No future prices have been received from the charger yet. + Laturista ei ole vielä saatu tulevia hintoja. + + + + Tariff selection + Tariffi valinta + + + + Loading available tariffs… + Ladataan saatavilla olevia tariffeja… + + + + Try again + Yritä uudelleen + + + + Country + Maa + + + + Provider + Palveluntarjoaja + + + + This tariff publishes prices every 15 minutes. It requires charger firmware 60.0 or newer. + Tämä tariffi julkaisee hinnat 15 minuutin välein. Se vaatii laturin laiteohjelmiston 60.0 tai uudemman. + + + + Save tariff + Tallenna tariffi + + + + GeneralOnOffSwitch + + + On + Päällä + + + + Off + Pois + + + + Unknown + Tuntematon + + + + GeneralPage + + + General + Yleiset + + + + Name + Nimi + + + + Switch Language + Vaihda kieltä + + + + Notifications + Ilmoitukset + + + + Date and time + Päivämäärä ja aika + + + + LED + LED + + + + Controller + Ohjain + + + + Display settings + Näyttöasetukset + + + + Reboot + Käynnistä uudelleen + + + + GridPage + + + Grid + Sähköverkko + + + + GroundCheckPage + + + Ground check + Maadoituksen tarkistus + + + + HardwareInformationPage + + + Hardware information + Laitteiston tiedot + + + + Serial Number: + Sarjanumero: + + + + Variant: + Vaihtoehto: + + + + RSSI: + RSSI: + + + + HotspotPage + + + Hotspot + Tukiasema + + + + Hotspot on + Hotspot päällä + + + + Hotspot off + Hotspot pois päältä + + + + Configuration + Kokoonpano + + + + Turn hotspot off when another internet connection is available + Kytke hotspot pois päältä, kun toinen internetyhteys on käytettävissä + + + + SSID + SSID + + + + Hotspot name + Hotspotin nimi + + + + Password + Salasana + + + + Custom password + Mukautettu salasana + + + + Default password + Oletussalasana + + + + Unknown + Tuntematon + + + + Enter a new password + Anna uusi salasana + + + + Security + Turvallisuus + + + + Open + Avoin + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + Channel + kanava + + + + Hotspot identity + Hotspot-identiteetti + + + + Hostname + Isäntänimi + + + + MAC address + MAC-osoite + + + + InformationChartPanel + + + + Value + Arvo + + + + Information + Tiedot + + + + %1 (%2) + %1 (%2) + + + + + + %1 %2 + %1 %2 + + + + InformationsTabPage + + + Category %1 + Luokka %1 + + + + Informations + Tiedot + + + + Idle + Valmiustilassa + + + + HEADERS_RECEIVED + HEADERS_RECEIVED + + + + LOADING + LADATAAN + + + + %1 images + %1 kuvia + + + + %1 charts + %1-kaaviot + + + + Loaded %1 + Ladattu %1 + + + + No information data received + Tietoa ei ole vastaanotettu + + + + Request started... + Pyyntö alkanut... + + + + Download informations + Lataa tiedot + + + + KwhLimitPage + + + kWh Limit + kWh Raja + + + + LanguageSelector + + + + German + Saksa + + + + + Swedish + Ruotsi + + + + + Finnish + Suomi + + + + + Norwegian + Norja + + + + + Turkish + Turkki + + + + + English + Englanti + + + + System default (%1) + Järjestelmän oletus (%1) + + + + App language + Sovelluksen kieli + + + + Numbers, dates, and times continue to use your system settings. + Numerot, päivämäärät ja kellonajat käyttävät edelleen järjestelmäasetuksiasi. + + + + LedPage + + + LED + LED + + + + LicensesPage + + + Licenses + Lisenssit + + + + LoadBalancingPage + + + Load Balancing + Kuorman tasapainotus + + + + MainScreen + + + %0 ago + %0 sitten + + + + in %0 + paikassa %0 + + + + + Charger + Laturi + + + + + Eco + Eco + + + + + Controller + Ohjain + + + + + + + Infromations + Infot + + + + + + + Settings + Asetukset + + + + MqttPage + + + MQTT + MQTT + + + + Broker URL + Välittäjä URL + + + + API documentation + API-dokumentaatio + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + + + + Trying to connect + Yritetään muodostaa yhteyttä + + + + Connected + Yhdistetty + + + + Connected since + Yhdistetty vuodesta + + + + Command counter + Komentojen laskuri + + + + Last error + Viimeinen virhe + + + + Last error age + Viimeisen virheen ikä + + + + Use global CA certificate store + Käytä maailmanlaajuista CA-varmennevarastoa + + + + Skip certificate common name check + Ohita varmenteen yleisnimen tarkistus + + + + Skip server certificate verification + Ohita palvelimen varmenteen vahvistus + + + + MQTT read-only + MQTT vain luku + + + + Topic prefix + Aiheen etuliite + + + + Home Assistant auto-discovery + Home Assistantin automaattinen haku + + + + Home Assistant topic prefix + Home Assistant -aiheetuliite + + + + NamePage + + + + Name + Nimi + + + + NotificationsPage + + + Notifications + Ilmoitukset + + + + OcppPage + + + OCPP + OCPP + + + + Backend url + Tausta-URL-osoite + + + + API documentation + API-dokumentaatio + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + + + + Trying to connect: + Yritetään yhdistää: + + + + Is connected: + On yhdistetty: + + + + Connected since: + Yhdistetty vuodesta: + + + + Is accepted: + Hyväksytään: + + + + Accepted since: + Hyväksytty vuodesta: + + + + Last error: + Viimeisin virhe: + + + + Last error age: + Viimeisen virheen ikä: + + + + Chargepoint status: + Latauspisteen tila: + + + + Available + Saatavilla + + + + Preparing + Valmistellaan + + + + Charging + Lataus + + + + SuspendedEVSE + Latausaseman keskeyttämä + + + + SuspendedEV + Ajoneuvon keskeyttämä + + + + Finishing + Viimeistellään + + + + Reserved + Varattu + + + + Unavailable + Ei saatavilla + + + + Faulted + Vikatila + + + + Use global CA store + Käytä maailmanlaajuista CA-kauppaa + + + + Skip cert commonName check + Ohita sertifikaatin commonName-tarkistus + + + + Skip server cert verification + Ohita palvelimen varmenteen vahvistus + + + + + Accept time from backend + Hyväksy aika backendistä + + + + Heartbeat interval: + Sykeväli: + + + + MeterValues sample interval: + MeterValues näyteväli: + + + + Clock aligned data interval: + Kelloon kohdistettu dataväli: + + + + Dummy card id + Nuken kortin tunnus + + + + Rotate phases on charger + Kierrätä laturin vaiheita + + + + Allow Offline Tx For UnknownId + Salli Offline Tx for UnknownId + + + + Local Authorize Offline + Paikallinen valtuutus offline-tilassa + + + + Local Auth List Enabled + Paikallinen todennusluettelo käytössä + + + + Set as inoperable + Aseta käyttökelvottomaksi + + + + PasswordPage + + + Password + Salasana + + + + PvSurplusPage + + + PV surplus + PV-ylijäämä + + + + %1 W + %1 W + + + + PV surplus charging on + PV-ylijäämälataus käytössä + + + + PV surplus charging off + PV-ylijäämälataus pois käytöstä + + + + Charging behavior + Latauskäyttäytyminen + + + + Choose when surplus charging starts, stops, and how closely it follows the available power. + Valitse, milloin PV-ylijäämälataus alkaa ja loppuu sekä kuinka tarkasti se seuraa käytettävissä olevaa tehoa. + + + + Surplus required to start + Alkuun tarvitaan ylijäämää + + + + Surplus must be available for + Ylijäämän on oltava saatavilla + + + + + Allow charging to pause when surplus is insufficient + Anna latauksen keskeytyä, kun ylijäämä ei riitä + + + + Minimum charging time before a pause + Vähimmäislatausaika ennen taukoa + + + + Power adjustment + Tehon säätö + + + + Prefer power from grid + Suosi sähköverkosta ottoa + + + + Round to nearest ampere + Pyöristä lähimpään ampeeriin + + + + Prefer power to grid + Suosi sähköverkkoon syöttöä + + + + Recalculate from current surplus after a long interruption + Laske uudelleen nykyisestä ylijäämästä pitkän tauon jälkeen + + + + Phase switching + Vaiheen vaihto + + + + Automatic switching can use one phase at low surplus and three phases at higher power. + Automaattinen vaihto voi käyttää yhtä vaihetta pienellä ylijäämällä ja kolmea vaihetta suuremmalla teholla. + + + + Switch to three phases above + Vaihda kolmelle vaiheelle arvon ylittyessä + + + + New phase request must remain valid for + Uuden vaihepyynnön on pysyttävä voimassa + + + + Minimum time between phase switches + Vaiheenvaihtojen vähimmäisväli + + + + Phase-switch hysteresis + Vaihekytkimen hystereesi + + + + Grid target and advanced tuning + Sähköverkkotavoite ja lisäsäädöt + + + + These values fine-tune whether a small amount of power is imported from or exported to the grid. + Näillä arvoilla hienosäädetään, otetaanko pieni määrä tehoa sähköverkosta vai syötetäänkö sitä sähköverkkoon. + + + + Grid power target + Sähköverkon tehotavoite + + + + Zero feed-in mode + Nollasyöttötila + + + + Zero feed-in offset + Nollasyötön siirtymä + + + + Grid priority offset + Sähköverkon prioriteettipoikkeama + + + + Stop hysteresis + Lopeta hystereesi + + + + RebootPage + + + Reboot + Käynnistä uudelleen + + + + SchedulerDayPage + + + Scheduler day + Aikataulun päivä + + + + 24 Hour + 24 tuntia + + + + SchedulerPage + + + Scheduler + Ajastin + + + + About Schedule + Tietoja aikataulusta + + + + Customize your charging routine on workdays, Saturdays, and Sundays. Define specific time slots for charging or blocking to perfectly align with your weekly schedule. Schedule can only start charging if all other functions like eco or access settings allow charging. + Mukauta latausrutiiniasi työpäivinä, lauantaisin ja sunnuntaisin. Määrittele tietyt aikavälit lataukselle tai estolle, jotta ne ovat täydellisesti linjassa viikkoaikataulusi kanssa. Aikataulu voi aloittaa latauksen vain, jos kaikki muut toiminnot, kuten eko- tai käyttöasetukset, sallivat latauksen. + + + + Charging schedule + Latausaikataulu + + + + go-e Charger will exclusively charge your car during the time slots you set, and won't charge for the rest of the time. + go-e Charger lataa autosi yksinomaan määrittämiesi aikavälien aikana, eikä lataa loppuaikaa. + + + + Blocking schedule + Estoaikataulu + + + + go-e Charger will block charging your car during the time slots you set, but it will charge your car for the rest of the time. + go-e Charger estää autosi lataamisen asettami aikavälien aikana, mutta lataa autoasi muun ajan. + + + + Workdays + Työpäivät + + + + Create workdays schedule + Luo työpäivien aikataulu + + + + Saturdays + lauantaisin + + + + Create saturdays schedule + Luo lauantain aikataulu + + + + Sundays + sunnuntaisin + + + + Create sundays schedule + Luo sunnuntain aikataulu + + + + SecurityPage + + + Security + Turvallisuus + + + + Cable + Kaapeli + + + + Access + Kulunvalvonta + + + + Password + Salasana + + + + Grid + Sähköverkko + + + + Ground check + Maadoituksen tarkistus + + + + SelectLogicModeItem + + + Eco + Eco + + + + Eco-friendly & cost effective + Ympäristöystävällinen ja kustannustehokas + + + + Basic + Perus + + + + Basic charging + Peruslataus + + + + Daily trip + Päivittäinen matka + + + + Specific energy and time + Ominaisenergia ja aika + + + + SelectPhaseSwitchModeItem + + + Phase switching + Vaiheen vaihto + + + + Automatic + Automaattinen + + + + 1-Phase + 1-vaihe + + + + 3-Phase + 3-vaiheinen + + + + SendMessageHelper + + + No device connection set! + Laiteliitäntää ei ole asetettu! + + + + SensorsConfigurationPage + + + Sensors Configuration + Anturien konfigurointi + + + + SetPriceLimitPage + + + Set price limit + Aseta hintaraja + + + + Set a proper price limit for charging, so charging starts when the electricity price is below this limit. Also, you can see the charging forecast chart below based on the limit that you define. + Aseta lataukselle sopiva hintaraja, jotta lataus alkaa sähkön hinnan alittaessa rajan. Alla näet myös määrittämääsi rajaan perustuvan latausennusteen. + + + + Price limit + Hintaraja + + + + %0 ct/kWh + %0 ct/kWh + + + + SettingsTabPage + + + Settings + Asetukset + + + + Charging configuration + Latauskokoonpano + + + + Charging Speed + Latausnopeus + + + + kWh Limit + kWh Raja + + + + Daily Trip + Päivittäinen matka + + + + Flexible energy tariff + Joustava energiatariffi + + + + PV Surplus + PV-ylijäämä + + + + Security + Turvallisuus + + + + Cable + Kaapeli + + + + Access + Kulunvalvonta + + + + Password + Salasana + + + + Grid + Sähköverkko + + + + Ground check + Maadoituksen tarkistus + + + + Sensors Configuration + Anturien konfigurointi + + + + Sensors + Anturit + + + + Categories + Luokat + + + + Connection + Yhteys + + + + Wi-Fi + Wi-Fi + + + + Cellular + Mobiiliverkko + + + + Hotspot + Tukiasema + + + + Ethernet + Ethernet + + + + Cloud + Pilvi + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API-asetukset + + + + General + Yleiset + + + + Name + Nimi + + + + Switch Language + Vaihda kieltä + + + + Notifications + Ilmoitukset + + + + Date and time + Päivämäärä ja aika + + + + LED + LED + + + + Controller + Ohjain + + + + Display settings + Näyttöasetukset + + + + About + Tietoja + + + + Firmware + Laiteohjelmisto + + + + Hardware information + Laitteiston tiedot + + + + Licenses + Lisenssit + + + + StartStopButton + + + Stop + Pysäytä + + + + Start + Aloita + + + + SwitchLanguagePage + + + Switch Language + Vaihda kieltä + + + + TimePickerLabel + + + AM + ap. + + + + PM + ip. + + + + WiFiErrorsPage + + + Wi-Fi Errors + Wi-Fi-virheet + + + + Timestamp: + Aikaleima: + + + + SSID: + SSID: + + + + BSSID: + BSSID: + + + + Reason: + Syy: + + + + WiFiPage + + + Wi-Fi + Wi-Fi + + + + Open + Avoin + + + + WEP + WEP + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA2 Enterprise + WPA2 Enterprise + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + WAPI + WAPI + + + + OWE + OWE + + + + WPA3 Enterprise + WPA3 Enterprise + + + + WPA3 External PSK + WPA3 ulkoinen PSK + + + + WPA3 External PSK mixed + WPA3 Ulkoinen PSK sekoitettu + + + + Unknown security + Tuntematon suojaus + + + + + Idle + Valmiustilassa + + + + Network not found + Verkkoa ei löydy + + + + Scan completed + Skannaus valmis + + + + + Connected + Yhdistetty + + + + Connection failed + Yhteys epäonnistui + + + + Connection lost + Yhteys katkesi + + + + Disconnected + Yhteys katkaistu + + + + + Connecting + Yhdistetään + + + + Disconnecting + Irrotetaan + + + + Wi-Fi unavailable + Wi-Fi ei ole käytettävissä + + + + Waiting for IP address + IP-osoitetta odotellessa + + + + + + Unknown + Tuntematon + + + + Not scanned yet + Ei vielä skannattu + + + + + Scanning + Skannaus + + + + Finished + Valmis + + + + Failed + Epäonnistui + + + + The Wi-Fi configuration has not been received yet. + Wi-Fi-asetuksia ei ole vielä vastaanotettu. + + + + All Wi-Fi configuration slots are occupied. Delete a configured network first. + Kaikki Wi-Fi-määrityspaikat ovat varattuja. Poista ensin määritetty verkko. + + + + Are you sure? + Oletko varma? + + + + Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud! + Wi-Fi-yhteyden poistaminen käytöstä saattaa tehdä laitteellesi yhteyden paikallisesta kotiverkosta tai pilvestä! + + + + Connection + Yhteys + + + + Status + Status + + + + Network + Verkko + + + + Not connected + Ei yhdistetty + + + + Unknown network + Tuntematon verkko + + + + Signal + Signaali + + + + Wi-Fi scan + Wi-Fi-skannaus + + + + Last scan + Viimeinen skannaus + + + + Never + Ei koskaan + + + + Configured networks + Määritetyt verkot + + + + Scanning… + Skannataan… + + + + Scan again + Skannaa uudelleen + + + + No configured networks + Ei määritettyjä verkkoja + + + + Static IP %1 + Staattinen IP %1 + + + + Automatic IP + Automaattinen IP + + + + Custom password + Mukautettu salasana + + + + Default password + Oletussalasana + + + + slot %1 + paikka %1 + + + + Delete + Poista + + + + Available networks + Käytettävissä olevat verkot + + + + Saved • %1 + Tallennettu • %1 + + + + Signal strength %1 dBm + Signaalin voimakkuus %1 dBm + + + + No networks found. Start another scan. + Verkkoja ei löytynyt. Aloita uusi skannaus. + + + + (%0) Wi-Fi Errors + (%0) Wi-Fi-virheet + + + + Advanced Wi-Fi settings + Wi-Fi-lisäasetukset + + + + Min RSSI + Minimi RSSI + + + + Support protected management frames + Tukee suojattuja hallintakehyksiä + + + + Require protected management frames + Vaadi suojattuja hallintakehyksiä + + + + Technical details + Tekniset tiedot + + + + Addressing + Osoittaminen + + + + IP %1 + IP %1 + + + + mask %1 + maski %1 + + + + gateway %1 + yhdyskäytävä %1 + + + + Access point + Tukiasema + + + + channel %1 + kanava %1 + + + + Connection process + Yhteysprosessi + + + + MAC address + MAC-osoite + + + + Hostname + Isäntänimi + + + + Connection errors + Yhteysvirheet + + + + Connect to Wi-Fi + Yhdistä Wi-Fi-verkkoon + + + + Password + Salasana + + + + Show password + Näytä salasana + + + + The password must contain at least 8 characters. + Salasanan tulee sisältää vähintään 8 merkkiä. + + + + This network does not require a password. + Tämä verkko ei vaadi salasanaa. + + + + The network will be saved in slot %1. + Verkko tallennetaan paikkaan %1. + + + + Delete Wi-Fi network? + Poistetaanko Wi-Fi-verkko? + + + + Delete %1 and all of its IP and DNS settings? + Poistetaanko %1 ja kaikki sen IP- ja DNS-asetukset? + + + + Cannot add Wi-Fi network + Wi-Fi-verkkoa ei voi lisätä + + + diff --git a/evcharger-app/i18n/qml_nb.ts b/evcharger-app/i18n/qml_nb.ts new file mode 100644 index 0000000..aa4f454 --- /dev/null +++ b/evcharger-app/i18n/qml_nb.ts @@ -0,0 +1,3596 @@ + + + + + AboutPage + + + About + Om + + + + Firmware + Fastvare + + + + Hardware information + Maskinvareinformasjon + + + + Licenses + Lisenser + + + + Enable demo mode + Aktiver demomodus + + + + Set charging color to new + Sett ladefarge til ny + + + + AccessPage + + + Access + Tilgangskontroll + + + + AddDeviceScreen + + + Setup or add device + Konfigurer eller legg til enhet + + + + Add via local connection or AP: + Legg til via lokal tilkobling eller AP: + + + + Local url + Lokal url + + + + + Connect + Koble til + + + + Add via cloud: + Legg til via skyen: + + + + Cloud Serial + Cloud Serial + + + + ApiEnumEditItem + + + Automatic + Automatisk + + + + ApiSettingsPage + + + API Settings + API-innstillinger + + + + Allow access to local HTTP-Api v2 + Tillat tilgang til lokal HTTP-Api v2 + + + + + + + API documentation + API-dokumentasjon + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + + + + Generate token + Generer token + + + + OK! token: %0 + OK! token: %0 + + + + Clear API token + Fjern API-token + + + + Enable cloud API + Aktiver cloud API + + + + + API key: %0 + API-nøkkel: %0 + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + + + + 3rdparty integrations (QR-Code) + Tredjepartsintegrasjoner (QR-kode) + + + + Enable grid API + Aktiver strømnett-API + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + + + + Allow access to legacy HTTP-Api v1 + Tillat tilgang til eldre HTTP-Api v1 + + + + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + + + + AppSettingsPage + + + App Settings + Appinnstillinger + + + + Language + Språk + + + + Number of app instances: + Antall appforekomster: + + + + solalaweb key: + solalaweb nøkkel: + + + + + Select... + Velg... + + + + + Replace... + Bytt ut... + + + + solalaweb cert: + solalaweb sertifikat: + + + + Show solalaweb: + Vis solalaweb: + + + + BaseNavigationPage + + + Back + Tilbake + + + + Return to the previous screen + Gå tilbake til forrige skjermbilde + + + + CablePage + + + Cable + Kabel + + + + CarPage + + + Car + Bil + + + + CellularPage + + + Cellular + Mobilnett + + + + No service + Ingen service + + + + GSM + GSM + + + + GPRS + GPRS + + + + EDGE + EDGE + + + + WCDMA + WCDMA + + + + HSDPA + HSDPA + + + + HSUPA + HSUPA + + + + HSPA + HSPA + + + + LTE + LTE + + + + Disconnected + Koblet fra + + + + Unavailable + Utilgjengelig + + + + Cellular on + Mobil på + + + + Cellular off + Mobil av + + + + Are you sure? + Er du sikker? + + + + Disabling cellular could make your device unreachable from the cloud! + Deaktivering av mobilnett kan gjøre enheten din utilgjengelig fra skyen! + + + + Mobile network + Mobilnett + + + + Connection + Tilkobling + + + + Operator + Operatør + + + + No operator + Ingen operatør + + + + Signal + Signal + + + + IP address + IP-adresse + + + + + No address + Ingen adresse + + + + Connection settings + Tilkoblingsinnstillinger + + + + APN + APN + + + + Access point name + Navn på tilgangspunkt + + + + SIM + SIM + + + + Embedded SIM + Innebygd SIM + + + + SIM card slot + SIM-kortspor + + + + SIM PIN + SIM PIN + + + + + Configured + Konfigurert + + + + + Not configured + Ikke konfigurert + + + + Enter a new PIN + Skriv inn en ny PIN-kode + + + + Preferred network + Foretrukket nettverk + + + + + Automatic + Automatisk + + + + 2G only + Kun 2G + + + + 4G only + Kun 4G + + + + Authentication + Autentisering + + + + None + Ingen + + + + PAP + PAP + + + + CHAP + CHAP + + + + MSCHAP + MSCHAP + + + + MSCHAP v2 + MSCHAP v2 + + + + EAP + EAP + + + + Username + Brukernavn + + + + Password + Passord + + + + Enter a new password + Skriv inn et nytt passord + + + + Forced operator + Tvunget operatør + + + + Automatic when empty + Automatisk når den er tom + + + + Hide modem details + Skjul modemdetaljer + + + + Show modem details + Vis modemdetaljer + + + + Modem details + Modemdetaljer + + + + Initialization + Initialisering + + + + SIM status + SIM-status + + + + IMEI + IMEI + + + + IMSI + IMSI + + + + ICCID + ICCID + + + + Operator selection + Operatørvalg + + + + Startup commands + Oppstartskommandoer + + + + Addressing + Adressering + + + + Not connected + Ikke tilkoblet + + + + subnet %1 + subnett %1 + + + + gateway %1 + gateway %1 + + + + ChargerTabPage + + + Internal error + Intern feil + + + + No car connected + Ingen bil tilkoblet + + + + Car is charging + Bilen lader + + + + Connecting to your car... + Kobler til bilen din ... + + + + Charging completed + Lading fullført + + + + Unknown error %0 + Ukjent feil %0 + + + + Plug in the cable to start charging your car + Koble til kabelen for å begynne å lade bilen + + + + Duration: %0 + Varighet: %0 + + + + Speed: %0 + Hastighet: %0 + + + + Amount: %0 + Beløp: %0 + + + + Charger is connecting to your car, it usually takes a few seconds + Laderen kobles til bilen din, det tar vanligvis noen sekunder + + + + Let's go-e :) + Let's go-e :) + + + + (api key doesnt exist) + (api-nøkkel finnes ikke) + + + + (api key is null) + (api-nøkkelen er null) + + + + (api key is not an object) + (api-nøkkel er ikke et objekt) + + + + (api key does not contain a type) + (api-nøkkel inneholder ikke en type) + + + + (api key has unknown type %0) + (api-nøkkel har ukjent type %0) + + + + %0 %1 %2 + %0 %1 %2 + + + + + + %0 A + %0 A + + + + %0 kWh + %0 kWh + + + + Price limit + Prisgrense + + + + %0 ct/kWh + %0 ct/kWh + + + + Daily trip + Daglig tur + + + + By %0 with %1 + Av %0 med %1 + + + + %0 km + %0 km + + + + Charging speed + Ladehastighet + + + + %0 & %1 + %0 & %1 + + + + %0 Ampere + %0 Ampere + + + + Automatic phase selection + Automatisk fasevalg + + + + 1-phase + 1-fase + + + + 3-phase + 3-fase + + + + Unknown phase selection (%0) + Ukjent fasevalg (%0) + + + + ChargingConfigurationPage + + + Charging configuration + Ladekonfigurasjon + + + + Charging Speed + Ladehastighet + + + + kWh Limit + kWh grense + + + + Daily Trip + Daglig tur + + + + Flexible energy tariff + Fleksibel energitariff + + + + PV Surplus + PV-overskudd + + + + Load Balancing + Lastbalansering + + + + Scheduler + Tidsplan + + + + Current Levels + Strømnivåer + + + + Car + Bil + + + + ChargingSpeedPage + + + Charging Speed + Ladehastighet + + + + CloudApiQrCodePage + + + 3rdparty integrations + Tredjepartsintegrasjoner + + + + https://device.go-e.io/%0?t=%1 + https://device.go-e.io/%0?t=%1 + + + + Open integrations page + Åpne integreringssiden + + + + CloudPage + + + Cloud + Sky + + + + Enable cloud connection + Aktiver skytilkobling + + + + Are you sure? + Er du sikker? + + + + Disabling the cloud connection could make your device unreachable from outside your home network! + Deaktivering av skytilkoblingen kan gjøre enheten din utilgjengelig utenfor hjemmenettverket! + + + + Features such as flexible energy tariffs, time synchronization, and remote app access are unavailable when the cloud connection is disabled. + Funksjoner som fleksible energitariffer, tidssynkronisering og ekstern apptilgang er utilgjengelige når skytilkoblingen er deaktivert. + + + + Trying to connect + Prøver å koble til + + + + Connected + Tilkoblet + + + + Hello received + Hei mottatt + + + + Cloud queue size + Cloud køstørrelse + + + + Last error + Siste feil + + + + CloudUrlsModel + + + V2 + V2 + + + + Wattpilot + Wattpilot + + + + go-eCharger + go-eCharger + + + + go-eController + go-eController + + + + Solalaweb + Solalaweb + + + + ConfirmingOnOffSwitch + + + On + På + + + + Off + Av + + + + Unknown + Ukjent + + + + ConnectingScreen + + + Trying to reach device... + Prøver å nå enheten ... + + + + Cancel + Avbryt + + + + ConnectionPage + + + Connection + Tilkobling + + + + Wi-Fi + Wi-Fi + + + + Join and manage wireless networks + Bli med og administrer trådløse nettverk + + + + Hotspot + Hotspot + + + + Configure the device's Wi-Fi access point + Konfigurer enhetens Wi-Fi-tilgangspunkt + + + + Ethernet + Ethernet + + + + Wired network and IP settings + Kablet nettverk og IP-innstillinger + + + + Cellular + Mobilnett + + + + SIM, APN and mobile network settings + SIM, APN og mobilnettverksinnstillinger + + + + Cloud + Sky + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API-innstillinger + + + + ControllerPage + + + Controller + Kontroller + + + + ControllerTabPage + + + Connected + Tilkoblet + + + + %0W + %0W + + + + CurrentLevelsPage + + + Current Levels + Strømnivåer + + + + DailyTripPage + + + Daily Trip + Daglig tur + + + + DateAndTimePage + + + Date and time + Dato og tid + + + + DeviceConnection + + + Connecting to %0 + Kobler til %0 + + + + Could not parse solalaweb certificate! + Kunne ikke analysere solalaweb-sertifikatet! + + + + Could not parse solalaweb key! + Kunne ikke analysere solalaweb-nøkkelen! + + + + Received something that is not a json object! + Mottok noe som ikke er et json-objekt! + + + + Received something that does not contain a type! + Mottatt noe som ikke inneholder en type! + + + + Received something with a non-string type! + Mottatt noe med en ikke-streng type! + + + + Received message type %0 %1 + Mottatt meldingstype %0 %1 + + + + Received hello without serial! + Mottatt hei uten serienummer! + + + + Received hello with a non-string serial! + Mottatt hei med en ikke-streng serie! + + + + Received hello with a non-bool secured! + Mottatt hei med en ikke-bool sikret! + + + + Received hello without manufacturer! + Mottatt hei uten produsent! + + + + Received hello with a non-string manufacturer! + Mottatt hei med en ikke-streng produsent! + + + + Received hello without devicetype! + Mottatt hei uten devicetype! + + + + Received hello with a non-string devicetype! + Mottatt hei med en ikke-streng enhetstype! + + + + Received hello without friendly_name! + Mottatt hei uten friendly_name! + + + + Received hello with a non-string friendly_name! + Mottatt hei med et vennlig_navn uten strenger! + + + + Received authRequired without token1! + Mottok authRequired uten token1! + + + + Received authRequired with a non-string token1! + Mottok authRequired med token1 som ikke er en streng! + + + + Received authRequired without token2! + Mottok authRequired uten token2! + + + + Received authRequired with a non-string token2! + Mottok authRequired med token2 som ikke er en streng! + + + + Received authRequired with a non-string hash algorithm! + Mottok authRequired med en hash-algoritme som ikke er en streng! + + + + Received authRequired with unsupported hash algorithm %0! + Mottok authRequired med hash-algoritmen %0 som ikke støttes! + + + + Received fullStatus with a non-bool partial! + Mottatt fullstatus med en ikke-bool-del! + + + + Received fullStatus without a status! + Mottatt fullstatus uten status! + + + + Received fullStatus with a non-object status! + Mottatt fullstatus med ikke-objekt-status! + + + + Received partial fullStatus + Mottatt delvis fullstatus + + + + Received last fullStatus + Mottatt siste fullstatus + + + + Received deltaStatus without a status! + Mottatt deltaStatus uten status! + + + + Received deltaStatus with a non-object status! + Mottatt deltaStatus med en ikke-objekt status! + + + + Received message with a non-string requestId! + Mottatt melding med en ikke-streng requestId! + + + + Sending %0 + Sender %0 + + + + Could not derive bcrypt authentication hash! + Kunne ikke utlede bcrypt autentisering hash! + + + + Connected! + Tilkoblet! + + + + Disconnected! + Koblet fra! + + + + Reconnecting to %0 + Kobler til %0 på nytt + + + + state changed: %0 + tilstand endret: %0 + + + + could not parse received json: %0 at offset %1 + kunne ikke analysere mottatt json: %0 ved offset %1 + + + + unknown binary message type %0 received + ukjent binær meldingstype %0 mottatt + + + + error occured: %0 + feil oppstod: %0 + + + + ssl peer verify error + ssl peer verify feil + + + + ssl errors + ssl feil + + + + ssl alert sent level=%0 type=%1 description=%2 + ssl-varsel sendt nivå=%0 type=%1 beskrivelse=%2 + + + + ssl alert received level=%0 type=%1 description=%2 + ssl-varsel mottatt nivå=%0 type=%1 beskrivelse=%2 + + + + ssl handshake interrupted on error + ssl-håndtrykk avbrutt ved feil + + + + unknown response type %0 + ukjent svartype %0 + + + + DeviceHeaderBar + + + Devices + Enheter + + + + DeviceListScreen + + + Device list + Enhetsliste + + + + App Settings + Appinnstillinger + + + + My devices + Mine enheter + + + + Found devices + Fant enheter + + + + Delete + Slett + + + + Serial Number %0 + Serienummer %0 + + + + Manufacturer: + Produsent: + + + + Device Type: + Enhetstype: + + + + Host Name: + Vertsnavn: + + + + Ip: + IP: + + + + Local + Lokalt + + + + Cloud + Sky + + + + Solala + Solala + + + + Add or setup device + Legg til eller konfigurer enhet + + + + DeviceScreen + + + Password required + Passord kreves + + + + Password: + Passord: + + + + Password + Passord + + + + Authentication impossible! + Autentisering umulig! + + + + To use this password remotely a password has to be setup first. This can be done over the AccessPoint. + For fjerntilgang må et passord først konfigureres. Dette kan gjøres via tilgangspunktet. + + + + Connection disturbed + Forbindelsen forstyrret + + + + DevicesModel + + + + Device %0 + Enhet %0 + + + + DisplaySettingsPage + + + Display settings + Skjerminnstillinger + + + + DurationEditItem + + + %1 h + %1 h + + + + %1 min + %1 min + + + + %1 s + %1 s + + + + Hours + Timer + + + + Minutes + Minutter + + + + Seconds + Sekunder + + + + EVChargerApp + + + EVcharger App + EVcharger App + + + + EcoTabPage + + + Eco + Øko + + + + + Flexible energy tariff + Fleksibel energitariff + + + + PV Surplus + PV-overskudd + + + + About eco + Om øko + + + + We offer to charge your car during periods of low electricity price, If you have an electricity contract based on flexible energy tariffs. + Vi tilbyr å lade bilen din i perioder med lav strømpris, dersom du har strømkontrakt basert på fleksible energitariffer. + + + + PV surplus energy + PV-overskuddsenergi + + + + By connecting a PV system and a controller to your charger, you can charge your EV particularly cheaply and use clean energy at the same time. + Ved å koble et PV-system og en kontroller til laderen din, kan du lade elbilen din spesielt billig og samtidig bruke ren energi. + + + + EthernetPage + + + Ethernet + Ethernet + + + + Not connected + Ikke tilkoblet + + + + Connected + Tilkoblet + + + + No link + Ingen lenke + + + + Unknown speed + Ukjent hastighet + + + + full duplex + full dupleks + + + + half duplex + halv tosidig + + + + Ethernet on + Ethernet på + + + + Ethernet off + Ethernet av + + + + Connection + Tilkobling + + + + Address + Adresse + + + + Link + Link + + + + + Gateway + Gateway + + + + IPv4 configuration + IPv4-konfigurasjon + + + + Static IP address + Statisk IP-adresse + + + + Automatic IP address (DHCP) + Automatisk IP-adresse (DHCP) + + + + IP address + IP-adresse + + + + Subnet mask + Subnettmaske + + + + Static DNS servers + Statiske DNS-servere + + + + Automatic DNS servers + Automatiske DNS-servere + + + + Primary DNS + Primær DNS + + + + Secondary DNS + Sekundær DNS + + + + Additional DNS + Ekstra DNS + + + + Interface details + Grensesnittdetaljer + + + + Hostname + Vertsnavn + + + + MAC address + MAC-adresse + + + + Initialization + Initialisering + + + + FirmwarePage + + + Firmware + Fastvare + + + + Running version: + Kjører versjon: + + + + Details: + Detaljer: + + + + Recommended version: + Anbefalt versjon: + + + + Update: + Oppdatering: + + + + Start + Start + + + + Abort + Avbryt + + + + Switch partition + Bytt partisjon + + + + Update status: + Oppdateringsstatus: + + + + Update progress: + Oppdateringsfremdrift: + + + + Update message: + Oppdater melding: + + + + FlexibleEnergyTariffPage + + + Flexible energy tariff + Fleksibel energitariff + + + + ct/kWh + ct/kWh + + + + %1 %2 + %1 %2 + + + + No current price period available + Ingen nåværende prisperiode tilgjengelig + + + + %1–%2 + %1–%2 + + + + Could not load the tariff catalog (HTTP %1). + Kunne ikke laste tariffkatalogen (HTTP %1). + + + + The tariff catalog contains invalid data: %1 + Tariffkatalogen inneholder ugyldige data: %1 + + + + %1 (%2 min) + %1 (%2 min) + + + + Charge when electricity is below your price limit. The charger downloads prices for the selected tariff and plans charging for the cheapest periods. + Lad når strømprisen er under prisgrensen din. Laderen henter prisene for valgt tariff og planlegger lading i de billigste periodene. + + + + + Flexible tariff charging on + Lading med fleksibel tariff på + + + + + Flexible tariff charging off + Lading med fleksibel tariff av + + + + + + Price limit + Prisgrense + + + + Selected tariff + Valgt tariff + + + + Tariff ID %1 + Tariff-ID %1 + + + + %1 • %2 + %1 • %2 + + + + Electricity prices + Strømpriser + + + + Current price + Gjeldende pris + + + + Upcoming prices (%1 available) + Kommende priser (%1 tilgjengelig) + + + + Price forecast (%1) + Prisprognose (%1) + + + + + + Tariff + Tariff + + + + Prices available until %1 + Priser tilgjengelig til %1 + + + + Lowest + Laveste + + + + Highest + Høyest + + + + No future prices have been received from the charger yet. + Ingen fremtidige priser er mottatt fra laderen ennå. + + + + Tariff selection + Tariffvalg + + + + Loading available tariffs… + Laster inn tilgjengelige tariffer … + + + + Try again + Prøv igjen + + + + Country + Land + + + + Provider + Leverandør + + + + This tariff publishes prices every 15 minutes. It requires charger firmware 60.0 or newer. + Denne tariffen publiserer priser hvert 15. minutt. Det krever laderfastvare 60.0 eller nyere. + + + + Save tariff + Lagre tariff + + + + GeneralOnOffSwitch + + + On + På + + + + Off + Av + + + + Unknown + Ukjent + + + + GeneralPage + + + General + Generelt + + + + Name + Navn + + + + Switch Language + Bytt språk + + + + Notifications + Varsler + + + + Date and time + Dato og tid + + + + LED + LED + + + + Controller + Kontroller + + + + Display settings + Skjerminnstillinger + + + + Reboot + Start på nytt + + + + GridPage + + + Grid + Strømnett + + + + GroundCheckPage + + + Ground check + Jordingskontroll + + + + HardwareInformationPage + + + Hardware information + Maskinvareinformasjon + + + + Serial Number: + Serienummer: + + + + Variant: + Variant: + + + + RSSI: + RSSI: + + + + HotspotPage + + + Hotspot + Hotspot + + + + Hotspot on + Hotspot på + + + + Hotspot off + Hotspot av + + + + Configuration + Konfigurasjon + + + + Turn hotspot off when another internet connection is available + Slå av hotspot når en annen Internett-tilkobling er tilgjengelig + + + + SSID + SSID + + + + Hotspot name + Hotspot-navn + + + + Password + Passord + + + + Custom password + Egendefinert passord + + + + Default password + Standard passord + + + + Unknown + Ukjent + + + + Enter a new password + Skriv inn et nytt passord + + + + Security + Sikkerhet + + + + Open + Åpent + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + Channel + Kanal + + + + Hotspot identity + Hotspot-identitet + + + + Hostname + Vertsnavn + + + + MAC address + MAC-adresse + + + + InformationChartPanel + + + + Value + Verdi + + + + Information + Informasjon + + + + %1 (%2) + %1 (%2) + + + + + + %1 %2 + %1 %2 + + + + InformationsTabPage + + + Category %1 + Kategori %1 + + + + Informations + Informasjon + + + + Idle + Inaktiv + + + + HEADERS_RECEIVED + HEADERS_RECEIVED + + + + LOADING + LASTER INN + + + + %1 images + %1 bilder + + + + %1 charts + %1-diagrammer + + + + Loaded %1 + Lastet inn %1 + + + + No information data received + Ingen informasjonsdata mottatt + + + + Request started... + Forespørsel startet... + + + + Download informations + Last ned informasjon + + + + KwhLimitPage + + + kWh Limit + kWh grense + + + + LanguageSelector + + + + German + tysk + + + + + Swedish + svensk + + + + + Finnish + finsk + + + + + Norwegian + norsk + + + + + Turkish + tyrkisk + + + + + English + engelsk + + + + System default (%1) + Systemstandard (%1) + + + + App language + Appens språk + + + + Numbers, dates, and times continue to use your system settings. + Tall, datoer og klokkeslett fortsetter å bruke systeminnstillingene dine. + + + + LedPage + + + LED + LED + + + + LicensesPage + + + Licenses + Lisenser + + + + LoadBalancingPage + + + Load Balancing + Lastbalansering + + + + MainScreen + + + %0 ago + %0 siden + + + + in %0 + i %0 + + + + + Charger + Lader + + + + + Eco + Øko + + + + + Controller + Kontroller + + + + + + + Infromations + Informasjon + + + + + + + Settings + Innstillinger + + + + MqttPage + + + MQTT + MQTT + + + + Broker URL + Megler URL + + + + API documentation + API-dokumentasjon + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + + + + Trying to connect + Prøver å koble til + + + + Connected + Tilkoblet + + + + Connected since + Tilkoblet siden + + + + Command counter + Kommandoteller + + + + Last error + Siste feil + + + + Last error age + Siste feilalder + + + + Use global CA certificate store + Bruk global CA-sertifikatlager + + + + Skip certificate common name check + Hopp over sertifikats vanlige navnsjekk + + + + Skip server certificate verification + Hopp over serversertifikatverifisering + + + + MQTT read-only + MQTT skrivebeskyttet + + + + Topic prefix + Emneprefiks + + + + Home Assistant auto-discovery + Home Assistant automatisk oppdagelse + + + + Home Assistant topic prefix + Home Assistant emneprefiks + + + + NamePage + + + + Name + Navn + + + + NotificationsPage + + + Notifications + Varsler + + + + OcppPage + + + OCPP + OCPP + + + + Backend url + Backend-url + + + + API documentation + API-dokumentasjon + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + + + + Trying to connect: + Prøver å koble til: + + + + Is connected: + Er tilkoblet: + + + + Connected since: + Tilkoblet siden: + + + + Is accepted: + Er akseptert: + + + + Accepted since: + Godtatt siden: + + + + Last error: + Siste feil: + + + + Last error age: + Siste feilalder: + + + + Chargepoint status: + Ladepunktstatus: + + + + Available + Tilgjengelig + + + + Preparing + Forbereder + + + + Charging + Lader + + + + SuspendedEVSE + Pauset av ladestasjonen + + + + SuspendedEV + Pauset av kjøretøyet + + + + Finishing + Avslutter + + + + Reserved + Reservert + + + + Unavailable + Utilgjengelig + + + + Faulted + Feil + + + + Use global CA store + Bruk global CA-butikk + + + + Skip cert commonName check + Hopp over sertifikat commonName-sjekk + + + + Skip server cert verification + Hopp over serversertifiseringsbekreftelse + + + + + Accept time from backend + Godta tid fra backend + + + + Heartbeat interval: + Hjerteslagintervall: + + + + MeterValues sample interval: + MeterValues eksempelintervall: + + + + Clock aligned data interval: + Klokkejustert dataintervall: + + + + Dummy card id + Dummy-kort-id + + + + Rotate phases on charger + Roter fasene på laderen + + + + Allow Offline Tx For UnknownId + Tillat frakoblet Tx for ukjent ID + + + + Local Authorize Offline + Lokal autoriser frakoblet + + + + Local Auth List Enabled + Lokal godkjenningsliste aktivert + + + + Set as inoperable + Sett som ubrukelig + + + + PasswordPage + + + Password + Passord + + + + PvSurplusPage + + + PV surplus + PV-overskudd + + + + %1 W + %1 W + + + + PV surplus charging on + Lading med PV-overskudd på + + + + PV surplus charging off + Lading med PV-overskudd av + + + + Charging behavior + Ladeadferd + + + + Choose when surplus charging starts, stops, and how closely it follows the available power. + Velg når overskuddsladingen starter og stopper, og hvor nøyaktig den følger tilgjengelig effekt. + + + + Surplus required to start + Krever overskudd for å starte + + + + Surplus must be available for + Overskudd skal være tilgjengelig for + + + + + Allow charging to pause when surplus is insufficient + La ladingen stoppe når overskuddet er utilstrekkelig + + + + Minimum charging time before a pause + Minimum ladetid før en pause + + + + Power adjustment + Effektjustering + + + + Prefer power from grid + Prioriter uttak fra strømnettet + + + + Round to nearest ampere + Avrund til nærmeste ampere + + + + Prefer power to grid + Prioriter innmating til strømnettet + + + + Recalculate from current surplus after a long interruption + Beregn på nytt fra strømoverskudd etter et lengre avbrudd + + + + Phase switching + Fasebytte + + + + Automatic switching can use one phase at low surplus and three phases at higher power. + Automatisk veksling kan bruke en fase ved lavt overskudd og tre faser ved høyere effekt. + + + + Switch to three phases above + Bytt til tre faser over + + + + New phase request must remain valid for + Ny faseforespørsel må forbli gyldig i + + + + Minimum time between phase switches + Minste tid mellom fasebytter + + + + Phase-switch hysteresis + Fasebryterhysterese + + + + Grid target and advanced tuning + Strømnettmål og avansert finjustering + + + + These values fine-tune whether a small amount of power is imported from or exported to the grid. + Disse verdiene finjusterer om en liten mengde effekt hentes fra eller mates inn i strømnettet. + + + + Grid power target + Effektmål for strømnettet + + + + Zero feed-in mode + Null innmatingsmodus + + + + Zero feed-in offset + Null innmatingsforskyvning + + + + Grid priority offset + Prioritetsforskyvning for strømnettet + + + + Stop hysteresis + Stopp hysterese + + + + RebootPage + + + Reboot + Start på nytt + + + + SchedulerDayPage + + + Scheduler day + Planlegger dag + + + + 24 Hour + 24 timer + + + + SchedulerPage + + + Scheduler + Tidsplan + + + + About Schedule + Om tidsplan + + + + Customize your charging routine on workdays, Saturdays, and Sundays. Define specific time slots for charging or blocking to perfectly align with your weekly schedule. Schedule can only start charging if all other functions like eco or access settings allow charging. + Tilpass laderutinen din på arbeidsdager, lørdager og søndager. Definer spesifikke tidsluker for lading eller blokkering for å passe perfekt med ukeplanen din. Tidsplanen kan bare starte lading hvis alle andre funksjoner som øko eller tilgangsinnstillinger tillater lading. + + + + Charging schedule + Ladeplan + + + + go-e Charger will exclusively charge your car during the time slots you set, and won't charge for the rest of the time. + go-e Charger vil kun lade bilen din i løpet av tidslukene du angir, og vil ikke lade resten av tiden. + + + + Blocking schedule + Blokkeringsplan + + + + go-e Charger will block charging your car during the time slots you set, but it will charge your car for the rest of the time. + go-e Charger vil blokkere lading av bilen din i løpet av tidslukene du angir, men den vil lade bilen din for resten av tiden. + + + + Workdays + Arbeidsdager + + + + Create workdays schedule + Lag arbeidsdagsplan + + + + Saturdays + lørdager + + + + Create saturdays schedule + Lag en lørdagsplan + + + + Sundays + søndager + + + + Create sundays schedule + Lag søndagsplan + + + + SecurityPage + + + Security + Sikkerhet + + + + Cable + Kabel + + + + Access + Tilgangskontroll + + + + Password + Passord + + + + Grid + Strømnett + + + + Ground check + Jordingskontroll + + + + SelectLogicModeItem + + + Eco + Øko + + + + Eco-friendly & cost effective + Miljøvennlig og kostnadseffektiv + + + + Basic + Grunnleggende + + + + Basic charging + Grunnleggende lading + + + + Daily trip + Daglig tur + + + + Specific energy and time + Spesifikk energi og tid + + + + SelectPhaseSwitchModeItem + + + Phase switching + Fasebytte + + + + Automatic + Automatisk + + + + 1-Phase + 1-fase + + + + 3-Phase + 3-fase + + + + SendMessageHelper + + + No device connection set! + Ingen enhetstilkobling satt! + + + + SensorsConfigurationPage + + + Sensors Configuration + Sensorkonfigurasjon + + + + SetPriceLimitPage + + + Set price limit + Sett prisgrense + + + + Set a proper price limit for charging, so charging starts when the electricity price is below this limit. Also, you can see the charging forecast chart below based on the limit that you define. + Sett en skikkelig prisgrense for lading, så lading starter når strømprisen er under denne grensen. Du kan også se ladeprognosediagrammet nedenfor basert på grensen du definerer. + + + + Price limit + Prisgrense + + + + %0 ct/kWh + %0 ct/kWh + + + + SettingsTabPage + + + Settings + Innstillinger + + + + Charging configuration + Ladekonfigurasjon + + + + Charging Speed + Ladehastighet + + + + kWh Limit + kWh grense + + + + Daily Trip + Daglig tur + + + + Flexible energy tariff + Fleksibel energitariff + + + + PV Surplus + PV-overskudd + + + + Security + Sikkerhet + + + + Cable + Kabel + + + + Access + Tilgangskontroll + + + + Password + Passord + + + + Grid + Strømnett + + + + Ground check + Jordingskontroll + + + + Sensors Configuration + Sensorkonfigurasjon + + + + Sensors + Sensorer + + + + Categories + Kategorier + + + + Connection + Tilkobling + + + + Wi-Fi + Wi-Fi + + + + Cellular + Mobilnett + + + + Hotspot + Hotspot + + + + Ethernet + Ethernet + + + + Cloud + Sky + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API-innstillinger + + + + General + Generelt + + + + Name + Navn + + + + Switch Language + Bytt språk + + + + Notifications + Varsler + + + + Date and time + Dato og tid + + + + LED + LED + + + + Controller + Kontroller + + + + Display settings + Skjerminnstillinger + + + + About + Om + + + + Firmware + Fastvare + + + + Hardware information + Maskinvareinformasjon + + + + Licenses + Lisenser + + + + StartStopButton + + + Stop + Stopp + + + + Start + Start + + + + SwitchLanguagePage + + + Switch Language + Bytt språk + + + + TimePickerLabel + + + AM + AM + + + + PM + PM + + + + WiFiErrorsPage + + + Wi-Fi Errors + Wi-Fi-feil + + + + Timestamp: + Tidsstempel: + + + + SSID: + SSID: + + + + BSSID: + BSSID: + + + + Reason: + Grunn: + + + + WiFiPage + + + Wi-Fi + Wi-Fi + + + + Open + Åpent + + + + WEP + WEP + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA2 Enterprise + WPA2 Enterprise + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + WAPI + WAPI + + + + OWE + OWE + + + + WPA3 Enterprise + WPA3 Enterprise + + + + WPA3 External PSK + WPA3 ekstern PSK + + + + WPA3 External PSK mixed + WPA3 Ekstern PSK blandet + + + + Unknown security + Ukjent sikkerhet + + + + + Idle + Inaktiv + + + + Network not found + Finner ikke nettverket + + + + Scan completed + Skanning fullført + + + + + Connected + Tilkoblet + + + + Connection failed + Tilkobling mislyktes + + + + Connection lost + Forbindelsen mistet + + + + Disconnected + Koblet fra + + + + + Connecting + Kobler til + + + + Disconnecting + Kobler fra + + + + Wi-Fi unavailable + Wi-Fi er utilgjengelig + + + + Waiting for IP address + Venter på IP-adresse + + + + + + Unknown + Ukjent + + + + Not scanned yet + Ikke skannet ennå + + + + + Scanning + Skanning + + + + Finished + Ferdig + + + + Failed + Mislyktes + + + + The Wi-Fi configuration has not been received yet. + Wi-Fi-konfigurasjonen er ikke mottatt ennå. + + + + All Wi-Fi configuration slots are occupied. Delete a configured network first. + Alle Wi-Fi-konfigurasjonsspor er opptatt. Slett et konfigurert nettverk først. + + + + Are you sure? + Er du sikker? + + + + Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud! + Deaktivering av Wi-Fi kan gjøre enheten din utilgjengelig fra ditt lokale hjemmenettverk eller skyen! + + + + Connection + Tilkobling + + + + Status + Status + + + + Network + Nettverk + + + + Not connected + Ikke tilkoblet + + + + Unknown network + Ukjent nettverk + + + + Signal + Signal + + + + Wi-Fi scan + Wi-Fi-skanning + + + + Last scan + Siste skanning + + + + Never + Aldri + + + + Configured networks + Konfigurerte nettverk + + + + Scanning… + Skanner … + + + + Scan again + Skann igjen + + + + No configured networks + Ingen konfigurerte nettverk + + + + Static IP %1 + Statisk IP %1 + + + + Automatic IP + Automatisk IP + + + + Custom password + Egendefinert passord + + + + Default password + Standard passord + + + + slot %1 + spor %1 + + + + Delete + Slett + + + + Available networks + Tilgjengelige nettverk + + + + Saved • %1 + Lagret • %1 + + + + Signal strength %1 dBm + Signalstyrke %1 dBm + + + + No networks found. Start another scan. + Ingen nettverk funnet. Start en ny skanning. + + + + (%0) Wi-Fi Errors + (%0) Wi-Fi-feil + + + + Advanced Wi-Fi settings + Avanserte Wi-Fi-innstillinger + + + + Min RSSI + Min RSSI + + + + Support protected management frames + Støtt beskyttede styringsrammer + + + + Require protected management frames + Krev beskyttede styringsrammer + + + + Technical details + Tekniske detaljer + + + + Addressing + Adressering + + + + IP %1 + IP %1 + + + + mask %1 + maske %1 + + + + gateway %1 + gateway %1 + + + + Access point + Tilgangspunkt + + + + channel %1 + kanal %1 + + + + Connection process + Tilkoblingsprosess + + + + MAC address + MAC-adresse + + + + Hostname + Vertsnavn + + + + Connection errors + Tilkoblingsfeil + + + + Connect to Wi-Fi + Koble til Wi-Fi + + + + Password + Passord + + + + Show password + Vis passord + + + + The password must contain at least 8 characters. + Passordet må inneholde minst 8 tegn. + + + + This network does not require a password. + Dette nettverket krever ikke passord. + + + + The network will be saved in slot %1. + Nettverket vil bli lagret i spor %1. + + + + Delete Wi-Fi network? + Vil du slette Wi-Fi-nettverket? + + + + Delete %1 and all of its IP and DNS settings? + Vil du slette %1 og alle dens IP- og DNS-innstillinger? + + + + Cannot add Wi-Fi network + Kan ikke legge til Wi-Fi-nettverk + + + diff --git a/evcharger-app/i18n/qml_sv.ts b/evcharger-app/i18n/qml_sv.ts new file mode 100644 index 0000000..4a9b3e5 --- /dev/null +++ b/evcharger-app/i18n/qml_sv.ts @@ -0,0 +1,3596 @@ + + + + + AboutPage + + + About + Om appen + + + + Firmware + Firmware + + + + Hardware information + Hårdvaruinformation + + + + Licenses + Licenser + + + + Enable demo mode + Aktivera demoläge + + + + Set charging color to new + Ställ in laddningsfärgen till ny + + + + AccessPage + + + Access + Åtkomstkontroll + + + + AddDeviceScreen + + + Setup or add device + Konfigurera eller lägg till enhet + + + + Add via local connection or AP: + Lägg till via lokal anslutning eller AP: + + + + Local url + Lokal url + + + + + Connect + Anslut + + + + Add via cloud: + Lägg till via moln: + + + + Cloud Serial + Cloud Serial + + + + ApiEnumEditItem + + + Automatic + Automatisk + + + + ApiSettingsPage + + + API Settings + API-inställningar + + + + Allow access to local HTTP-Api v2 + Tillåt åtkomst till lokal HTTP-Api v2 + + + + + + + API documentation + API dokumentation + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + + + + Generate token + Generera token + + + + OK! token: %0 + ok! token: %0 + + + + Clear API token + Rensa API-token + + + + Enable cloud API + Aktivera moln-API + + + + + API key: %0 + API-nyckel: %0 + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + + + + 3rdparty integrations (QR-Code) + Tredjepartsintegrationer (QR-kod) + + + + Enable grid API + Aktivera elnäts-API + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + + + + Allow access to legacy HTTP-Api v1 + Tillåt åtkomst till äldre HTTP-Api v1 + + + + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + + + + AppSettingsPage + + + App Settings + Appinställningar + + + + Language + Språk + + + + Number of app instances: + Antal appinstanser: + + + + solalaweb key: + solalaweb nyckel: + + + + + Select... + Välj... + + + + + Replace... + Ersätt... + + + + solalaweb cert: + solalaweb certifikat: + + + + Show solalaweb: + Visa solalaweb: + + + + BaseNavigationPage + + + Back + Tillbaka + + + + Return to the previous screen + Återgå till föregående skärm + + + + CablePage + + + Cable + Kabel + + + + CarPage + + + Car + Bil + + + + CellularPage + + + Cellular + Mobilnät + + + + No service + Ingen service + + + + GSM + GSM + + + + GPRS + GPRS + + + + EDGE + EDGE + + + + WCDMA + WCDMA + + + + HSDPA + HSDPA + + + + HSUPA + HSUPA + + + + HSPA + HSPA + + + + LTE + LTE + + + + Disconnected + Frånkopplad + + + + Unavailable + Inte tillgänglig + + + + Cellular on + Cellulär på + + + + Cellular off + Mobil avstängd + + + + Are you sure? + Är du säker? + + + + Disabling cellular could make your device unreachable from the cloud! + Om du inaktiverar mobilnätet kan din enhet inte nås från molnet! + + + + Mobile network + Mobilt nätverk + + + + Connection + Anslutning + + + + Operator + Operatör + + + + No operator + Ingen operatör + + + + Signal + Signal + + + + IP address + IP-adress + + + + + No address + Ingen adress + + + + Connection settings + Anslutningsinställningar + + + + APN + APN + + + + Access point name + Åtkomstpunktens namn + + + + SIM + SIM + + + + Embedded SIM + Inbäddat SIM + + + + SIM card slot + SIM-kortplats + + + + SIM PIN + SIM PIN + + + + + Configured + Konfigurerad + + + + + Not configured + Ej konfigurerad + + + + Enter a new PIN + Ange en ny PIN-kod + + + + Preferred network + Föredraget nätverk + + + + + Automatic + Automatisk + + + + 2G only + Endast 2G + + + + 4G only + Endast 4G + + + + Authentication + Autentisering + + + + None + Ingen + + + + PAP + PAP + + + + CHAP + CHAP + + + + MSCHAP + MSCHAP + + + + MSCHAP v2 + MSCHAP v2 + + + + EAP + EAP + + + + Username + Användarnamn + + + + Password + Lösenord + + + + Enter a new password + Ange ett nytt lösenord + + + + Forced operator + Tvångsoperatör + + + + Automatic when empty + Automatisk när den är tom + + + + Hide modem details + Dölj modemdetaljer + + + + Show modem details + Visa modemdetaljer + + + + Modem details + Modemdetaljer + + + + Initialization + Initialisering + + + + SIM status + SIM-status + + + + IMEI + IMEI + + + + IMSI + IMSI + + + + ICCID + ICCID + + + + Operator selection + Val av operatör + + + + Startup commands + Startkommandon + + + + Addressing + Adressering + + + + Not connected + Ej ansluten + + + + subnet %1 + subnät %1 + + + + gateway %1 + gateway %1 + + + + ChargerTabPage + + + Internal error + Internt fel + + + + No car connected + Ingen bil ansluten + + + + Car is charging + Bilen laddas + + + + Connecting to your car... + Ansluter till din bil... + + + + Charging completed + Laddningen är klar + + + + Unknown error %0 + Okänt fel %0 + + + + Plug in the cable to start charging your car + Koppla in kabeln för att börja ladda din bil + + + + Duration: %0 + Varaktighet: %0 + + + + Speed: %0 + Hastighet: %0 + + + + Amount: %0 + Belopp: %0 + + + + Charger is connecting to your car, it usually takes a few seconds + Laddaren ansluter till din bil, det tar vanligtvis några sekunder + + + + Let's go-e :) + Let's go-e :) + + + + (api key doesnt exist) + (api-nyckel finns inte) + + + + (api key is null) + (api-nyckeln är null) + + + + (api key is not an object) + (api-nyckel är inte ett objekt) + + + + (api key does not contain a type) + (api-nyckel innehåller ingen typ) + + + + (api key has unknown type %0) + (api-nyckel har okänd typ %0) + + + + %0 %1 %2 + %0 %1 %2 + + + + + + %0 A + %0 A + + + + %0 kWh + %0 kWh + + + + Price limit + Prisgräns + + + + %0 ct/kWh + %0 ct/kWh + + + + Daily trip + Daglig resa + + + + By %0 with %1 + Av %0 med %1 + + + + %0 km + %0 km + + + + Charging speed + Laddningshastighet + + + + %0 & %1 + %0 & %1 + + + + %0 Ampere + %0 Ampere + + + + Automatic phase selection + Automatiskt fasval + + + + 1-phase + 1-fas + + + + 3-phase + 3-fas + + + + Unknown phase selection (%0) + Okänt fasval (%0) + + + + ChargingConfigurationPage + + + Charging configuration + Laddningskonfiguration + + + + Charging Speed + Laddningshastighet + + + + kWh Limit + kWh-gräns + + + + Daily Trip + Daglig resa + + + + Flexible energy tariff + Flexibel energitariff + + + + PV Surplus + PV-överskott + + + + Load Balancing + Lastbalansering + + + + Scheduler + Schema + + + + Current Levels + Strömnivåer + + + + Car + Bil + + + + ChargingSpeedPage + + + Charging Speed + Laddningshastighet + + + + CloudApiQrCodePage + + + 3rdparty integrations + Tredjepartsintegrationer + + + + https://device.go-e.io/%0?t=%1 + https://device.go-e.io/%0?t=%1 + + + + Open integrations page + Öppna integrationssidan + + + + CloudPage + + + Cloud + Moln + + + + Enable cloud connection + Aktivera molnanslutning + + + + Are you sure? + Är du säker? + + + + Disabling the cloud connection could make your device unreachable from outside your home network! + Att inaktivera molnanslutningen kan göra att din enhet inte kan nås utanför ditt hemnätverk! + + + + Features such as flexible energy tariffs, time synchronization, and remote app access are unavailable when the cloud connection is disabled. + Funktioner som flexibla energitariffer, tidssynkronisering och fjärrappåtkomst är inte tillgängliga när molnanslutningen är inaktiverad. + + + + Trying to connect + Försöker ansluta + + + + Connected + Ansluten + + + + Hello received + Hej mottaget + + + + Cloud queue size + Cloud köstorlek + + + + Last error + Senaste felet + + + + CloudUrlsModel + + + V2 + V2 + + + + Wattpilot + Wattpilot + + + + go-eCharger + go-eCharger + + + + go-eController + go-eController + + + + Solalaweb + Solalaweb + + + + ConfirmingOnOffSwitch + + + On + På + + + + Off + Av + + + + Unknown + Okänd + + + + ConnectingScreen + + + Trying to reach device... + Försöker nå enheten... + + + + Cancel + Avbryt + + + + ConnectionPage + + + Connection + Anslutning + + + + Wi-Fi + Wi-Fi + + + + Join and manage wireless networks + Gå med och hantera trådlösa nätverk + + + + Hotspot + Hotspot + + + + Configure the device's Wi-Fi access point + Konfigurera enhetens Wi-Fi-åtkomstpunkt + + + + Ethernet + Ethernet + + + + Wired network and IP settings + Trådbundna nätverk och IP-inställningar + + + + Cellular + Mobilnät + + + + SIM, APN and mobile network settings + SIM-, APN- och mobilnätverksinställningar + + + + Cloud + Moln + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API-inställningar + + + + ControllerPage + + + Controller + Styrenhet + + + + ControllerTabPage + + + Connected + Ansluten + + + + %0W + %0W + + + + CurrentLevelsPage + + + Current Levels + Strömnivåer + + + + DailyTripPage + + + Daily Trip + Daglig resa + + + + DateAndTimePage + + + Date and time + Datum och tid + + + + DeviceConnection + + + Connecting to %0 + Ansluter till %0 + + + + Could not parse solalaweb certificate! + Kunde inte analysera solalaweb-certifikat! + + + + Could not parse solalaweb key! + Kunde inte analysera solalaweb-nyckeln! + + + + Received something that is not a json object! + Fick något som inte är ett json-objekt! + + + + Received something that does not contain a type! + Fick något som inte innehåller en typ! + + + + Received something with a non-string type! + Fick något med en icke-sträng typ! + + + + Received message type %0 %1 + Mottaget meddelande typ %0 %1 + + + + Received hello without serial! + Fick hej utan serie! + + + + Received hello with a non-string serial! + Fick hej med en icke-strängad serie! + + + + Received hello with a non-bool secured! + Fick hej med en icke-bool säkrad! + + + + Received hello without manufacturer! + Fick hej utan tillverkare! + + + + Received hello with a non-string manufacturer! + Fick hej med en icke-strängtillverkare! + + + + Received hello without devicetype! + Fick hej utan devicetype! + + + + Received hello with a non-string devicetype! + Fick hej med en icke-strängad enhetstyp! + + + + Received hello without friendly_name! + Fick hej utan friendly_name! + + + + Received hello with a non-string friendly_name! + Fick hej med ett icke-strängat friendly_name! + + + + Received authRequired without token1! + Mottog authRequired utan token1! + + + + Received authRequired with a non-string token1! + Mottog authRequired med token1 som inte är en sträng! + + + + Received authRequired without token2! + Mottog authRequired utan token2! + + + + Received authRequired with a non-string token2! + Mottog authRequired med token2 som inte är en sträng! + + + + Received authRequired with a non-string hash algorithm! + Mottog authRequired med en hash-algoritm som inte är en sträng! + + + + Received authRequired with unsupported hash algorithm %0! + Mottog authRequired med hash-algoritmen %0 som inte stöds! + + + + Received fullStatus with a non-bool partial! + Fick fullstatus med en icke-bool partial! + + + + Received fullStatus without a status! + Fick fullstatus utan status! + + + + Received fullStatus with a non-object status! + Fick fullstatus med en icke-objektstatus! + + + + Received partial fullStatus + Fick delvis fullstatus + + + + Received last fullStatus + Fick senaste fullständiga status + + + + Received deltaStatus without a status! + Fick deltaStatus utan status! + + + + Received deltaStatus with a non-object status! + Mottog deltaStatus med en icke-objektstatus! + + + + Received message with a non-string requestId! + Mottaget meddelande med ett begäran-ID utan sträng! + + + + Sending %0 + Skickar %0 + + + + Could not derive bcrypt authentication hash! + Kunde inte härleda bcrypt-autentiseringshash! + + + + Connected! + Ansluten! + + + + Disconnected! + Frånkopplad! + + + + Reconnecting to %0 + Återansluter till %0 + + + + state changed: %0 + tillstånd ändrat: %0 + + + + could not parse received json: %0 at offset %1 + kunde inte analysera mottagen json: %0 vid offset %1 + + + + unknown binary message type %0 received + okänd binär meddelandetyp %0 mottagen + + + + error occured: %0 + fel uppstod: %0 + + + + ssl peer verify error + ssl peer verifieringsfel + + + + ssl errors + ssl-fel + + + + ssl alert sent level=%0 type=%1 description=%2 + ssl alert skickad nivå=%0 typ=%1 beskrivning=%2 + + + + ssl alert received level=%0 type=%1 description=%2 + ssl alert mottagen nivå=%0 typ=%1 beskrivning=%2 + + + + ssl handshake interrupted on error + ssl-handskakning avbröts vid fel + + + + unknown response type %0 + okänd svarstyp %0 + + + + DeviceHeaderBar + + + Devices + Enheter + + + + DeviceListScreen + + + Device list + Enhetslista + + + + App Settings + Appinställningar + + + + My devices + Mina enheter + + + + Found devices + Hittade enheter + + + + Delete + Ta bort + + + + Serial Number %0 + Serienummer %0 + + + + Manufacturer: + Tillverkare: + + + + Device Type: + Enhetstyp: + + + + Host Name: + Värdnamn: + + + + Ip: + IP: + + + + Local + Lokal + + + + Cloud + Moln + + + + Solala + Solala + + + + Add or setup device + Lägg till eller konfigurera enhet + + + + DeviceScreen + + + Password required + Lösenord krävs + + + + Password: + Lösenord: + + + + Password + Lösenord + + + + Authentication impossible! + Autentisering omöjlig! + + + + To use this password remotely a password has to be setup first. This can be done over the AccessPoint. + För fjärråtkomst måste ett lösenord först konfigureras. Det kan göras via åtkomstpunkten. + + + + Connection disturbed + Anslutningen störd + + + + DevicesModel + + + + Device %0 + Enhet %0 + + + + DisplaySettingsPage + + + Display settings + Displayinställningar + + + + DurationEditItem + + + %1 h + %1 h + + + + %1 min + %1 min + + + + %1 s + %1 s + + + + Hours + Timmar + + + + Minutes + Minuter + + + + Seconds + Sekunder + + + + EVChargerApp + + + EVcharger App + EVcharger App + + + + EcoTabPage + + + Eco + Eco + + + + + Flexible energy tariff + Flexibel energitariff + + + + PV Surplus + PV-överskott + + + + About eco + Om eko + + + + We offer to charge your car during periods of low electricity price, If you have an electricity contract based on flexible energy tariffs. + Vi erbjuder att ladda din bil under perioder med lågt elpris, om du har ett elavtal baserat på flexibla energitariffer. + + + + PV surplus energy + PV-överskottsenergi + + + + By connecting a PV system and a controller to your charger, you can charge your EV particularly cheaply and use clean energy at the same time. + Genom att ansluta ett PV-system och en styrenhet till din laddare kan du ladda din EV särskilt billigt och samtidigt använda ren energi. + + + + EthernetPage + + + Ethernet + Ethernet + + + + Not connected + Ej ansluten + + + + Connected + Ansluten + + + + No link + Ingen länk + + + + Unknown speed + Okänd hastighet + + + + full duplex + full duplex + + + + half duplex + halv duplex + + + + Ethernet on + Ethernet på + + + + Ethernet off + Ethernet avstängt + + + + Connection + Anslutning + + + + Address + Adress + + + + Link + Länk + + + + + Gateway + Gateway + + + + IPv4 configuration + IPv4-konfiguration + + + + Static IP address + Statisk IP-adress + + + + Automatic IP address (DHCP) + Automatisk IP-adress (DHCP) + + + + IP address + IP-adress + + + + Subnet mask + Subnätmask + + + + Static DNS servers + Statiska DNS-servrar + + + + Automatic DNS servers + Automatiska DNS-servrar + + + + Primary DNS + Primär DNS + + + + Secondary DNS + Sekundär DNS + + + + Additional DNS + Ytterligare DNS + + + + Interface details + Gränssnittsdetaljer + + + + Hostname + Värdnamn + + + + MAC address + MAC-adress + + + + Initialization + Initialisering + + + + FirmwarePage + + + Firmware + Firmware + + + + Running version: + Kör version: + + + + Details: + Detaljer: + + + + Recommended version: + Rekommenderad version: + + + + Update: + Uppdatering: + + + + Start + Start + + + + Abort + Abortera + + + + Switch partition + Byt partition + + + + Update status: + Uppdateringsstatus: + + + + Update progress: + Uppdateringsförlopp: + + + + Update message: + Uppdateringsmeddelande: + + + + FlexibleEnergyTariffPage + + + Flexible energy tariff + Flexibel energitariff + + + + ct/kWh + ct/kWh + + + + %1 %2 + %1 %2 + + + + No current price period available + Ingen aktuell prisperiod tillgänglig + + + + %1–%2 + %1–%2 + + + + Could not load the tariff catalog (HTTP %1). + Det gick inte att ladda tariffkatalogen (HTTP %1). + + + + The tariff catalog contains invalid data: %1 + Tariffkatalogen innehåller ogiltiga data: %1 + + + + %1 (%2 min) + %1 (%2 min) + + + + Charge when electricity is below your price limit. The charger downloads prices for the selected tariff and plans charging for the cheapest periods. + Ladda när elpriset ligger under din prisgräns. Laddaren hämtar priserna för den valda tariffen och planerar laddningen till de billigaste perioderna. + + + + + Flexible tariff charging on + Laddning med flexibel tariff på + + + + + Flexible tariff charging off + Laddning med flexibel tariff av + + + + + + Price limit + Prisgräns + + + + Selected tariff + Vald tariff + + + + Tariff ID %1 + Tariff-ID %1 + + + + %1 • %2 + %1 • %2 + + + + Electricity prices + Elpriser + + + + Current price + Aktuellt pris + + + + Upcoming prices (%1 available) + Kommande priser (%1 tillgänglig) + + + + Price forecast (%1) + Prisprognos (%1) + + + + + + Tariff + Tariff + + + + Prices available until %1 + Priser tillgängliga fram till %1 + + + + Lowest + Lägst + + + + Highest + Högsta + + + + No future prices have been received from the charger yet. + Inga framtida priser har erhållits från laddaren ännu. + + + + Tariff selection + Tariffval + + + + Loading available tariffs… + Laddar tillgängliga tariffer... + + + + Try again + Försök igen + + + + Country + Land + + + + Provider + Leverantör + + + + This tariff publishes prices every 15 minutes. It requires charger firmware 60.0 or newer. + Denna tariff publicerar priser var 15:e minut. Det kräver laddarens firmware 60.0 eller senare. + + + + Save tariff + Spara tariff + + + + GeneralOnOffSwitch + + + On + På + + + + Off + Av + + + + Unknown + Okänd + + + + GeneralPage + + + General + Allmänt + + + + Name + Namn + + + + Switch Language + Byt språk + + + + Notifications + Aviseringar + + + + Date and time + Datum och tid + + + + LED + LED + + + + Controller + Styrenhet + + + + Display settings + Displayinställningar + + + + Reboot + Starta om + + + + GridPage + + + Grid + Elnät + + + + GroundCheckPage + + + Ground check + Jordningskontroll + + + + HardwareInformationPage + + + Hardware information + Hårdvaruinformation + + + + Serial Number: + Serienummer: + + + + Variant: + Variant: + + + + RSSI: + RSSI: + + + + HotspotPage + + + Hotspot + Hotspot + + + + Hotspot on + Hotspot på + + + + Hotspot off + Hotspot avstängd + + + + Configuration + Konfiguration + + + + Turn hotspot off when another internet connection is available + Stäng av hotspot när en annan internetanslutning är tillgänglig + + + + SSID + SSID + + + + Hotspot name + Hotspot-namn + + + + Password + Lösenord + + + + Custom password + Anpassat lösenord + + + + Default password + Standardlösenord + + + + Unknown + Okänd + + + + Enter a new password + Ange ett nytt lösenord + + + + Security + Säkerhet + + + + Open + Öppet + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + Channel + Kanal + + + + Hotspot identity + Hotspot-identitet + + + + Hostname + Värdnamn + + + + MAC address + MAC-adress + + + + InformationChartPanel + + + + Value + Värde + + + + Information + Information + + + + %1 (%2) + %1 (%2) + + + + + + %1 %2 + %1 %2 + + + + InformationsTabPage + + + Category %1 + Kategori %1 + + + + Informations + Information + + + + Idle + Inaktiv + + + + HEADERS_RECEIVED + HEADERS_RECEIVED + + + + LOADING + LÄSER IN + + + + %1 images + %1 bilder + + + + %1 charts + %1-diagram + + + + Loaded %1 + Laddade %1 + + + + No information data received + Ingen information mottagen + + + + Request started... + Begäran startade... + + + + Download informations + Ladda ner information + + + + KwhLimitPage + + + kWh Limit + kWh-gräns + + + + LanguageSelector + + + + German + tyska + + + + + Swedish + svenska + + + + + Finnish + finska + + + + + Norwegian + norska + + + + + Turkish + turkiska + + + + + English + engelska + + + + System default (%1) + Systemstandard (%1) + + + + App language + Appens språk + + + + Numbers, dates, and times continue to use your system settings. + Siffror, datum och tider fortsätter att använda dina systeminställningar. + + + + LedPage + + + LED + LED + + + + LicensesPage + + + Licenses + Licenser + + + + LoadBalancingPage + + + Load Balancing + Lastbalansering + + + + MainScreen + + + %0 ago + %0 sedan + + + + in %0 + i %0 + + + + + Charger + Laddare + + + + + Eco + Eco + + + + + Controller + Styrenhet + + + + + + + Infromations + Information + + + + + + + Settings + Inställningar + + + + MqttPage + + + MQTT + MQTT + + + + Broker URL + Mäklarens URL + + + + API documentation + API dokumentation + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + + + + Trying to connect + Försöker ansluta + + + + Connected + Ansluten + + + + Connected since + Ansluten sedan + + + + Command counter + Kommandoräknare + + + + Last error + Senaste felet + + + + Last error age + Senaste felålder + + + + Use global CA certificate store + Använd globalt CA-certifikatlager + + + + Skip certificate common name check + Hoppa över certifikatets gemensamma namnkontroll + + + + Skip server certificate verification + Hoppa över servercertifikatverifiering + + + + MQTT read-only + MQTT skrivskyddad + + + + Topic prefix + Ämnesprefix + + + + Home Assistant auto-discovery + Home Assistant automatisk upptäckt + + + + Home Assistant topic prefix + Home Assistant ämnesprefix + + + + NamePage + + + + Name + Namn + + + + NotificationsPage + + + Notifications + Aviseringar + + + + OcppPage + + + OCPP + OCPP + + + + Backend url + Backend-url + + + + API documentation + API dokumentation + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + + + + Trying to connect: + Försöker ansluta: + + + + Is connected: + Är ansluten: + + + + Connected since: + Ansluten sedan: + + + + Is accepted: + Godkänns: + + + + Accepted since: + Godkänd sedan: + + + + Last error: + Senaste felet: + + + + Last error age: + Senaste felålder: + + + + Chargepoint status: + Laddpunktsstatus: + + + + Available + Tillgänglig + + + + Preparing + Förbereder + + + + Charging + Laddar + + + + SuspendedEVSE + Pausad av laddstationen + + + + SuspendedEV + Pausad av fordonet + + + + Finishing + Slutför + + + + Reserved + Reserverad + + + + Unavailable + Inte tillgänglig + + + + Faulted + Fel + + + + Use global CA store + Använd global CA-butik + + + + Skip cert commonName check + Hoppa över cert commonName-kontroll + + + + Skip server cert verification + Hoppa över servercertifikatverifiering + + + + + Accept time from backend + Acceptera tid från backend + + + + Heartbeat interval: + Hjärtslagsintervall: + + + + MeterValues sample interval: + MeterValues exempelintervall: + + + + Clock aligned data interval: + Klockanpassat dataintervall: + + + + Dummy card id + Dummy-kort-id + + + + Rotate phases on charger + Rotera faserna på laddaren + + + + Allow Offline Tx For UnknownId + Tillåt Offline Tx för okänt ID + + + + Local Authorize Offline + Lokal auktorisera offline + + + + Local Auth List Enabled + Lokal autentiseringslista aktiverad + + + + Set as inoperable + Ställ in som inoperabel + + + + PasswordPage + + + Password + Lösenord + + + + PvSurplusPage + + + PV surplus + PV-överskott + + + + %1 W + %1 W + + + + PV surplus charging on + Laddning med PV-överskott på + + + + PV surplus charging off + Laddning med PV-överskott av + + + + Charging behavior + Laddningsbeteende + + + + Choose when surplus charging starts, stops, and how closely it follows the available power. + Välj när överskottsladdning startar, stoppar och hur nära den följer den tillgängliga effekten. + + + + Surplus required to start + Överskott krävs för att starta + + + + Surplus must be available for + Överskott ska finnas tillgängligt för + + + + + Allow charging to pause when surplus is insufficient + Låt laddningen pausas när överskottet är otillräckligt + + + + Minimum charging time before a pause + Minsta laddningstid före en paus + + + + Power adjustment + Effektjustering + + + + Prefer power from grid + Prioritera uttag från elnätet + + + + Round to nearest ampere + Avrunda till närmaste ampere + + + + Prefer power to grid + Prioritera inmatning till elnätet + + + + Recalculate from current surplus after a long interruption + Räkna om från aktuellt överskott efter ett långt avbrott + + + + Phase switching + Fasomkoppling + + + + Automatic switching can use one phase at low surplus and three phases at higher power. + Automatisk omkoppling kan använda en fas vid lågt överskott och tre faser vid högre effekt. + + + + Switch to three phases above + Växla till tre faser över + + + + New phase request must remain valid for + Ny fasbegäran måste förbli giltig i + + + + Minimum time between phase switches + Minsta tid mellan fasomkopplingar + + + + Phase-switch hysteresis + Fasomkopplarhysteres + + + + Grid target and advanced tuning + Elnätsmål och avancerad finjustering + + + + These values fine-tune whether a small amount of power is imported from or exported to the grid. + Dessa värden finjusterar om en liten mängd effekt tas från eller matas in till elnätet. + + + + Grid power target + Måleffekt för elnätet + + + + Zero feed-in mode + Noll inmatningsläge + + + + Zero feed-in offset + Noll inmatningsförskjutning + + + + Grid priority offset + Prioritetsförskjutning för elnätet + + + + Stop hysteresis + Sluta hysteres + + + + RebootPage + + + Reboot + Starta om + + + + SchedulerDayPage + + + Scheduler day + Schemaläggarens dag + + + + 24 Hour + 24 timmar + + + + SchedulerPage + + + Scheduler + Schema + + + + About Schedule + Om schema + + + + Customize your charging routine on workdays, Saturdays, and Sundays. Define specific time slots for charging or blocking to perfectly align with your weekly schedule. Schedule can only start charging if all other functions like eco or access settings allow charging. + Anpassa din laddningsrutin på arbetsdagar, lördagar och söndagar. Definiera specifika tidsluckor för laddning eller blockering för att perfekt anpassa sig till ditt veckoschema. Schema kan bara börja laddas om alla andra funktioner som eko eller åtkomstinställningar tillåter laddning. + + + + Charging schedule + Laddningsschema + + + + go-e Charger will exclusively charge your car during the time slots you set, and won't charge for the rest of the time. + go-e Charger laddar exklusivt din bil under de tidsluckor du ställer in och laddar inte under resten av tiden. + + + + Blocking schedule + Blockerande schema + + + + go-e Charger will block charging your car during the time slots you set, but it will charge your car for the rest of the time. + go-e Charger kommer att blockera laddning av din bil under de tidsluckor du ställer in, men den kommer att ladda din bil för resten av tiden. + + + + Workdays + Arbetsdagar + + + + Create workdays schedule + Skapa arbetsdagars schema + + + + Saturdays + lördagar + + + + Create saturdays schedule + Skapa lördagsschema + + + + Sundays + söndagar + + + + Create sundays schedule + Skapa söndagsschema + + + + SecurityPage + + + Security + Säkerhet + + + + Cable + Kabel + + + + Access + Åtkomstkontroll + + + + Password + Lösenord + + + + Grid + Elnät + + + + Ground check + Jordningskontroll + + + + SelectLogicModeItem + + + Eco + Eco + + + + Eco-friendly & cost effective + Miljövänlig och kostnadseffektiv + + + + Basic + Grundläggande + + + + Basic charging + Grundläggande laddning + + + + Daily trip + Daglig resa + + + + Specific energy and time + Specifik energi och tid + + + + SelectPhaseSwitchModeItem + + + Phase switching + Fasomkoppling + + + + Automatic + Automatisk + + + + 1-Phase + 1-fas + + + + 3-Phase + 3-fas + + + + SendMessageHelper + + + No device connection set! + Ingen enhetsanslutning inställd! + + + + SensorsConfigurationPage + + + Sensors Configuration + Sensorkonfiguration + + + + SetPriceLimitPage + + + Set price limit + Sätt prisgräns + + + + Set a proper price limit for charging, so charging starts when the electricity price is below this limit. Also, you can see the charging forecast chart below based on the limit that you define. + Sätt en ordentlig prisgräns för laddning, så laddningen startar när elpriset ligger under denna gräns. Du kan också se laddningsprognosdiagrammet nedan baserat på den gräns du definierar. + + + + Price limit + Prisgräns + + + + %0 ct/kWh + %0 ct/kWh + + + + SettingsTabPage + + + Settings + Inställningar + + + + Charging configuration + Laddningskonfiguration + + + + Charging Speed + Laddningshastighet + + + + kWh Limit + kWh-gräns + + + + Daily Trip + Daglig resa + + + + Flexible energy tariff + Flexibel energitariff + + + + PV Surplus + PV-överskott + + + + Security + Säkerhet + + + + Cable + Kabel + + + + Access + Åtkomstkontroll + + + + Password + Lösenord + + + + Grid + Elnät + + + + Ground check + Jordningskontroll + + + + Sensors Configuration + Sensorkonfiguration + + + + Sensors + Sensorer + + + + Categories + Kategorier + + + + Connection + Anslutning + + + + Wi-Fi + Wi-Fi + + + + Cellular + Mobilnät + + + + Hotspot + Hotspot + + + + Ethernet + Ethernet + + + + Cloud + Moln + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API-inställningar + + + + General + Allmänt + + + + Name + Namn + + + + Switch Language + Byt språk + + + + Notifications + Aviseringar + + + + Date and time + Datum och tid + + + + LED + LED + + + + Controller + Styrenhet + + + + Display settings + Displayinställningar + + + + About + Om appen + + + + Firmware + Firmware + + + + Hardware information + Hårdvaruinformation + + + + Licenses + Licenser + + + + StartStopButton + + + Stop + Stoppa + + + + Start + Start + + + + SwitchLanguagePage + + + Switch Language + Byt språk + + + + TimePickerLabel + + + AM + fm + + + + PM + em + + + + WiFiErrorsPage + + + Wi-Fi Errors + Wi-Fi-fel + + + + Timestamp: + Tidsstämpel: + + + + SSID: + SSID: + + + + BSSID: + BSSID: + + + + Reason: + Orsak: + + + + WiFiPage + + + Wi-Fi + Wi-Fi + + + + Open + Öppet + + + + WEP + WEP + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA2 Enterprise + WPA2 Enterprise + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + WAPI + WAPI + + + + OWE + OWE + + + + WPA3 Enterprise + WPA3 Enterprise + + + + WPA3 External PSK + WPA3 Extern PSK + + + + WPA3 External PSK mixed + WPA3 Extern PSK blandad + + + + Unknown security + Okänd säkerhet + + + + + Idle + Inaktiv + + + + Network not found + Nätverket hittades inte + + + + Scan completed + Skanningen slutförd + + + + + Connected + Ansluten + + + + Connection failed + Anslutning misslyckades + + + + Connection lost + Anslutning förlorad + + + + Disconnected + Frånkopplad + + + + + Connecting + Ansluter + + + + Disconnecting + Kopplar bort + + + + Wi-Fi unavailable + Wi-Fi är inte tillgängligt + + + + Waiting for IP address + Väntar på IP-adress + + + + + + Unknown + Okänd + + + + Not scanned yet + Inte skannat ännu + + + + + Scanning + Söker + + + + Finished + Färdig + + + + Failed + Misslyckades + + + + The Wi-Fi configuration has not been received yet. + Wi-Fi-konfigurationen har inte tagits emot ännu. + + + + All Wi-Fi configuration slots are occupied. Delete a configured network first. + Alla Wi-Fi-konfigurationsplatser är upptagna. Ta bort ett konfigurerat nätverk först. + + + + Are you sure? + Är du säker? + + + + Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud! + Att inaktivera Wi-Fi kan göra att din enhet inte kan nås från ditt lokala hemnätverk eller molnet! + + + + Connection + Anslutning + + + + Status + Status + + + + Network + Nätverk + + + + Not connected + Ej ansluten + + + + Unknown network + Okänt nätverk + + + + Signal + Signal + + + + Wi-Fi scan + Wi-Fi-skanning + + + + Last scan + Sista skanningen + + + + Never + Aldrig + + + + Configured networks + Konfigurerade nätverk + + + + Scanning… + Söker… + + + + Scan again + Skanna igen + + + + No configured networks + Inga konfigurerade nätverk + + + + Static IP %1 + Statisk IP %1 + + + + Automatic IP + Automatisk IP + + + + Custom password + Anpassat lösenord + + + + Default password + Standardlösenord + + + + slot %1 + plats %1 + + + + Delete + Ta bort + + + + Available networks + Tillgängliga nätverk + + + + Saved • %1 + Sparad • %1 + + + + Signal strength %1 dBm + Signalstyrka %1 dBm + + + + No networks found. Start another scan. + Inga nätverk hittades. Starta en ny skanning. + + + + (%0) Wi-Fi Errors + (%0) Wi-Fi-fel + + + + Advanced Wi-Fi settings + Avancerade Wi-Fi-inställningar + + + + Min RSSI + Min RSSI + + + + Support protected management frames + Stöd skyddade hanteringsramar + + + + Require protected management frames + Kräv skyddade hanteringsramar + + + + Technical details + Tekniska detaljer + + + + Addressing + Adressering + + + + IP %1 + IP %1 + + + + mask %1 + mask %1 + + + + gateway %1 + gateway %1 + + + + Access point + Åtkomstpunkt + + + + channel %1 + kanal %1 + + + + Connection process + Anslutningsprocess + + + + MAC address + MAC-adress + + + + Hostname + Värdnamn + + + + Connection errors + Anslutningsfel + + + + Connect to Wi-Fi + Anslut till Wi-Fi + + + + Password + Lösenord + + + + Show password + Visa lösenord + + + + The password must contain at least 8 characters. + Lösenordet måste innehålla minst 8 tecken. + + + + This network does not require a password. + Detta nätverk kräver inget lösenord. + + + + The network will be saved in slot %1. + Nätverket kommer att sparas i plats %1. + + + + Delete Wi-Fi network? + Ta bort Wi-Fi-nätverk? + + + + Delete %1 and all of its IP and DNS settings? + Ta bort %1 och alla dess IP- och DNS-inställningar? + + + + Cannot add Wi-Fi network + Det går inte att lägga till Wi-Fi-nätverk + + + diff --git a/evcharger-app/i18n/qml_tr.ts b/evcharger-app/i18n/qml_tr.ts new file mode 100644 index 0000000..035dcb9 --- /dev/null +++ b/evcharger-app/i18n/qml_tr.ts @@ -0,0 +1,3596 @@ + + + + + AboutPage + + + About + Hakkında + + + + Firmware + Firmware + + + + Hardware information + Donanım bilgileri + + + + Licenses + Lisanslar + + + + Enable demo mode + Demo modunu etkinleştir + + + + Set charging color to new + Şarj rengini yeniye ayarla + + + + AccessPage + + + Access + Erişim kontrolü + + + + AddDeviceScreen + + + Setup or add device + Cihazı kurun veya ekleyin + + + + Add via local connection or AP: + Yerel bağlantı veya AP aracılığıyla ekleyin: + + + + Local url + Yerel URL + + + + + Connect + Bağlan + + + + Add via cloud: + Bulut yoluyla ekle: + + + + Cloud Serial + Bulut Dizisi + + + + ApiEnumEditItem + + + Automatic + Otomatik + + + + ApiSettingsPage + + + API Settings + API Ayarları + + + + Allow access to local HTTP-Api v2 + Yerel HTTP-Api v2'ye erişime izin ver + + + + + + + API documentation + API belgeleri + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/http-en.md + + + + Generate token + Belirteç oluştur + + + + OK! token: %0 + TAMAM! jeton: %0 + + + + Clear API token + API jetonunu temizle + + + + Enable cloud API + Bulut API'sini etkinleştir + + + + + API key: %0 + API anahtarı: %0 + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/cloudapi-en.md + + + + 3rdparty integrations (QR-Code) + 3. parti entegrasyonlar (QR-Code) + + + + Enable grid API + Şebeke API'sini etkinleştir + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/gridapi-en.md + + + + Allow access to legacy HTTP-Api v1 + Eski HTTP-Api v1'e erişime izin ver + + + + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + https://github.com/goecharger/go-eCharger-API-v1/blob/master/go-eCharger%20API%20v1%20EN.md + + + + AppSettingsPage + + + App Settings + Uygulama Ayarları + + + + Language + Dil + + + + Number of app instances: + Uygulama örneklerinin sayısı: + + + + solalaweb key: + solalaweb anahtarı: + + + + + Select... + Seç... + + + + + Replace... + Değiştir... + + + + solalaweb cert: + solalaweb sertifikası: + + + + Show solalaweb: + Solalaweb'i göster: + + + + BaseNavigationPage + + + Back + Geri + + + + Return to the previous screen + Önceki ekrana dön + + + + CablePage + + + Cable + Kablo + + + + CarPage + + + Car + Araba + + + + CellularPage + + + Cellular + Mobil ağ + + + + No service + Hizmet yok + + + + GSM + GSM + + + + GPRS + GPRS + + + + EDGE + EDGE + + + + WCDMA + WCDMA + + + + HSDPA + HSDPA + + + + HSUPA + HSUPA + + + + HSPA + HSPA + + + + LTE + LTE + + + + Disconnected + Bağlantı kesildi + + + + Unavailable + Mevcut değil + + + + Cellular on + Hücresel açık + + + + Cellular off + Hücresel kapalı + + + + Are you sure? + Emin misin? + + + + Disabling cellular could make your device unreachable from the cloud! + Hücresel bağlantıyı devre dışı bırakmak, cihazınıza buluttan erişilemez hale gelebilir! + + + + Mobile network + Mobil ağ + + + + Connection + Bağlantı + + + + Operator + Operatör + + + + No operator + Operatör yok + + + + Signal + Sinyal + + + + IP address + IP adresi + + + + + No address + Adres yok + + + + Connection settings + Bağlantı ayarları + + + + APN + APN + + + + Access point name + Erişim noktası adı + + + + SIM + SIM + + + + Embedded SIM + Gömülü SIM + + + + SIM card slot + SIM kart yuvası + + + + SIM PIN + SIM PIN'i + + + + + Configured + Yapılandırılmış + + + + + Not configured + Yapılandırılmadı + + + + Enter a new PIN + Yeni bir PIN girin + + + + Preferred network + Tercih edilen ağ + + + + + Automatic + Otomatik + + + + 2G only + Yalnızca 2G + + + + 4G only + Yalnızca 4G + + + + Authentication + Kimlik doğrulama + + + + None + Hiçbiri + + + + PAP + PAP + + + + CHAP + CHAP + + + + MSCHAP + MSCHAP + + + + MSCHAP v2 + MSCHAP v2 + + + + EAP + EAP + + + + Username + Kullanıcı adı + + + + Password + Şifre + + + + Enter a new password + Yeni bir şifre girin + + + + Forced operator + Zorunlu operatör + + + + Automatic when empty + Boş olduğunda otomatik + + + + Hide modem details + Modem ayrıntılarını gizle + + + + Show modem details + Modem ayrıntılarını göster + + + + Modem details + Modem ayrıntıları + + + + Initialization + Başlatma + + + + SIM status + SIM durumu + + + + IMEI + IMEI + + + + IMSI + IMSI + + + + ICCID + ICCID + + + + Operator selection + Operatör seçimi + + + + Startup commands + Başlangıç komutları + + + + Addressing + Adresleme + + + + Not connected + Bağlı değil + + + + subnet %1 + alt ağ %1 + + + + gateway %1 + ağ geçidi %1 + + + + ChargerTabPage + + + Internal error + Dahili hata + + + + No car connected + Hiçbir araba bağlı değil + + + + Car is charging + Araba şarj oluyor + + + + Connecting to your car... + Arabanıza bağlanılıyor... + + + + Charging completed + Şarj işlemi tamamlandı + + + + Unknown error %0 + Bilinmeyen hata %0 + + + + Plug in the cable to start charging your car + Arabanızı şarj etmeye başlamak için kabloyu takın + + + + Duration: %0 + Süre: %0 + + + + Speed: %0 + Hız: %0 + + + + Amount: %0 + Tutar: %0 + + + + Charger is connecting to your car, it usually takes a few seconds + Şarj cihazı arabanıza bağlanıyor; bu işlem genellikle birkaç saniye sürer + + + + Let's go-e :) + Let's go-e :) + + + + (api key doesnt exist) + (api anahtarı mevcut değil) + + + + (api key is null) + (api anahtarı boş) + + + + (api key is not an object) + (api anahtarı bir nesne değil) + + + + (api key does not contain a type) + (api anahtarı bir tür içermiyor) + + + + (api key has unknown type %0) + (api anahtarının bilinmeyen türü %0 var) + + + + %0 %1 %2 + %0 %1 %2 + + + + + + %0 A + %0 A + + + + %0 kWh + %0 kWh + + + + Price limit + Fiyat sınırı + + + + %0 ct/kWh + %0 ct/kWh + + + + Daily trip + Günlük gezi + + + + By %0 with %1 + %0 tarafından %1 ile + + + + %0 km + %0 km + + + + Charging speed + Şarj hızı + + + + %0 & %1 + %0 & %1 + + + + %0 Ampere + %0 Amper + + + + Automatic phase selection + Otomatik faz seçimi + + + + 1-phase + 1 fazlı + + + + 3-phase + 3 fazlı + + + + Unknown phase selection (%0) + Bilinmeyen faz seçimi (%0) + + + + ChargingConfigurationPage + + + Charging configuration + Şarj yapılandırması + + + + Charging Speed + Şarj Hızı + + + + kWh Limit + kWh Limiti + + + + Daily Trip + Günlük Gezi + + + + Flexible energy tariff + Esnek enerji tarifesi + + + + PV Surplus + PV fazlası + + + + Load Balancing + Yük Dengeleme + + + + Scheduler + Zamanlayıcı + + + + Current Levels + Akım seviyeleri + + + + Car + Araba + + + + ChargingSpeedPage + + + Charging Speed + Şarj Hızı + + + + CloudApiQrCodePage + + + 3rdparty integrations + 3. taraf entegrasyonları + + + + https://device.go-e.io/%0?t=%1 + https://device.go-e.io/%0?t=%1 + + + + Open integrations page + Entegrasyonlar sayfasını aç + + + + CloudPage + + + Cloud + Bulut + + + + Enable cloud connection + Bulut bağlantısını etkinleştir + + + + Are you sure? + Emin misin? + + + + Disabling the cloud connection could make your device unreachable from outside your home network! + Bulut bağlantısını devre dışı bırakmak, cihazınıza ev ağınızın dışından erişilemez hale gelebilir! + + + + Features such as flexible energy tariffs, time synchronization, and remote app access are unavailable when the cloud connection is disabled. + Bulut bağlantısı devre dışı bırakıldığında esnek enerji tarifeleri, zaman senkronizasyonu ve uzaktan uygulama erişimi gibi özellikler kullanılamaz. + + + + Trying to connect + Bağlanmaya çalışıyorum + + + + Connected + Bağlı + + + + Hello received + Merhaba alındı + + + + Cloud queue size + Bulut kuyruğu boyutu + + + + Last error + Son hata + + + + CloudUrlsModel + + + V2 + V2 + + + + Wattpilot + Wattpilot + + + + go-eCharger + go-eCharger + + + + go-eController + go-eController + + + + Solalaweb + Solalaweb + + + + ConfirmingOnOffSwitch + + + On + Açık + + + + Off + Kapalı + + + + Unknown + Bilinmiyor + + + + ConnectingScreen + + + Trying to reach device... + Cihaza ulaşılmaya çalışılıyor... + + + + Cancel + İptal + + + + ConnectionPage + + + Connection + Bağlantı + + + + Wi-Fi + Wi-Fi + + + + Join and manage wireless networks + Kablosuz ağlara katılın ve yönetin + + + + Hotspot + Erişim noktası + + + + Configure the device's Wi-Fi access point + Cihazın Wi-Fi erişim noktasını yapılandırın + + + + Ethernet + Ethernet + + + + Wired network and IP settings + Kablolu ağ ve IP ayarları + + + + Cellular + Mobil ağ + + + + SIM, APN and mobile network settings + SIM, APN ve mobil ağ ayarları + + + + Cloud + Bulut + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API Ayarları + + + + ControllerPage + + + Controller + Kontrol cihazı + + + + ControllerTabPage + + + Connected + Bağlı + + + + %0W + %0W + + + + CurrentLevelsPage + + + Current Levels + Akım seviyeleri + + + + DailyTripPage + + + Daily Trip + Günlük Gezi + + + + DateAndTimePage + + + Date and time + Tarih ve saat + + + + DeviceConnection + + + Connecting to %0 + %0'ye bağlanma + + + + Could not parse solalaweb certificate! + Solalaweb sertifikası ayrıştırılamadı! + + + + Could not parse solalaweb key! + Solalaweb anahtarı ayrıştırılamadı! + + + + Received something that is not a json object! + Json nesnesi olmayan bir şey alındı! + + + + Received something that does not contain a type! + Tür içermeyen bir şey alındı! + + + + Received something with a non-string type! + Dize olmayan türde bir şey alındı! + + + + Received message type %0 %1 + Alınan mesaj türü %0 %1 + + + + Received hello without serial! + Seri olmadan merhaba aldım! + + + + Received hello with a non-string serial! + Dize dışı bir diziyle merhaba aldım! + + + + Received hello with a non-bool secured! + Bool olmayan bir güvenlikle merhaba aldım! + + + + Received hello without manufacturer! + Üretici olmadan merhaba aldım! + + + + Received hello with a non-string manufacturer! + String olmayan bir üreticiden merhaba aldım! + + + + Received hello without devicetype! + Devicetype olmadan merhaba alındı! + + + + Received hello with a non-string devicetype! + Dize dışı bir cihaz türüyle merhaba alındı! + + + + Received hello without friendly_name! + Friendly_name olmadan merhaba aldım! + + + + Received hello with a non-string friendly_name! + Dize olmayan bir dostu_ad ile merhaba aldım! + + + + Received authRequired without token1! + token1 olmadan authRequired alındı! + + + + Received authRequired with a non-string token1! + token1 dize değilken authRequired alındı! + + + + Received authRequired without token2! + token2 olmadan authRequired alındı! + + + + Received authRequired with a non-string token2! + token2 dize değilken authRequired alındı! + + + + Received authRequired with a non-string hash algorithm! + Dize olmayan bir karma algoritmasıyla authRequired alındı! + + + + Received authRequired with unsupported hash algorithm %0! + Desteklenmeyen %0 karma algoritmasıyla authRequired alındı! + + + + Received fullStatus with a non-bool partial! + Bool olmayan bir kısmi ile fullStatus alındı! + + + + Received fullStatus without a status! + Durum olmadan fullStatus alındı! + + + + Received fullStatus with a non-object status! + Nesne olmayan bir durumla fullStatus alındı! + + + + Received partial fullStatus + Kısmi tam durum alındı + + + + Received last fullStatus + En son alınan fullStatus + + + + Received deltaStatus without a status! + Durum olmadan deltaStatus alındı! + + + + Received deltaStatus with a non-object status! + Nesne olmayan bir durumla deltaStatus alındı! + + + + Received message with a non-string requestId! + Dize olmayan bir istek kimliğine sahip ileti alındı! + + + + Sending %0 + %0 gönderiliyor + + + + Could not derive bcrypt authentication hash! + Bcrypt kimlik doğrulama karması türetilemedi! + + + + Connected! + Bağlı! + + + + Disconnected! + Bağlantı kesildi! + + + + Reconnecting to %0 + %0'ye yeniden bağlanılıyor + + + + state changed: %0 + durum değişti: %0 + + + + could not parse received json: %0 at offset %1 + alınan json ayrıştırılamadı: %1 konumunda %0 + + + + unknown binary message type %0 received + bilinmeyen ikili mesaj türü %0 alındı + + + + error occured: %0 + hata oluştu: %0 + + + + ssl peer verify error + SSL eş doğrulama hatası + + + + ssl errors + SSL hataları + + + + ssl alert sent level=%0 type=%1 description=%2 + SSL uyarısı gönderildi seviye=%0 tür=%1 açıklama=%2 + + + + ssl alert received level=%0 type=%1 description=%2 + SSL uyarısı alındı düzey=%0 tür=%1 açıklama=%2 + + + + ssl handshake interrupted on error + SSL anlaşması hata nedeniyle kesintiye uğradı + + + + unknown response type %0 + bilinmeyen yanıt türü %0 + + + + DeviceHeaderBar + + + Devices + Cihazlar + + + + DeviceListScreen + + + Device list + Cihaz listesi + + + + App Settings + Uygulama Ayarları + + + + My devices + Cihazlarım + + + + Found devices + Bulunan cihazlar + + + + Delete + Sil + + + + Serial Number %0 + Seri Numarası %0 + + + + Manufacturer: + Üretici: + + + + Device Type: + Cihaz Türü: + + + + Host Name: + Ana Bilgisayar Adı: + + + + Ip: + IP: + + + + Local + Yerel + + + + Cloud + Bulut + + + + Solala + Solala + + + + Add or setup device + Cihaz ekleyin veya kurun + + + + DeviceScreen + + + Password required + Şifre gerekli + + + + Password: + Şifre: + + + + Password + Şifre + + + + Authentication impossible! + Kimlik doğrulama imkansız! + + + + To use this password remotely a password has to be setup first. This can be done over the AccessPoint. + Bu şifreyi uzaktan kullanmak için önce bir şifre ayarlanmalıdır. Bu işlem erişim noktası üzerinden yapılabilir. + + + + Connection disturbed + Bağlantı bozuldu + + + + DevicesModel + + + + Device %0 + Cihaz %0 + + + + DisplaySettingsPage + + + Display settings + Ekran ayarları + + + + DurationEditItem + + + %1 h + %1 h + + + + %1 min + %1 dk. + + + + %1 s + %1 s + + + + Hours + Saat + + + + Minutes + dakika + + + + Seconds + Saniye + + + + EVChargerApp + + + EVcharger App + EVcharger App + + + + EcoTabPage + + + Eco + Eko + + + + + Flexible energy tariff + Esnek enerji tarifesi + + + + PV Surplus + PV fazlası + + + + About eco + Eko hakkında + + + + We offer to charge your car during periods of low electricity price, If you have an electricity contract based on flexible energy tariffs. + Esnek enerji tarifelerine dayalı bir elektrik sözleşmeniz varsa, aracınızı elektrik fiyatının düşük olduğu dönemlerde şarj etmenizi öneriyoruz. + + + + PV surplus energy + PV fazla enerjisi + + + + By connecting a PV system and a controller to your charger, you can charge your EV particularly cheaply and use clean energy at the same time. + Şarj cihazınıza bir PV sistemi ve bir kontrol cihazı bağlayarak EV'nizi özellikle ucuza şarj edebilir ve aynı zamanda temiz enerji kullanabilirsiniz. + + + + EthernetPage + + + Ethernet + Ethernet + + + + Not connected + Bağlı değil + + + + Connected + Bağlı + + + + No link + Bağlantı yok + + + + Unknown speed + Bilinmeyen hız + + + + full duplex + tam çift yönlü + + + + half duplex + yarım dubleks + + + + Ethernet on + Ethernet açık + + + + Ethernet off + Ethernet kapalı + + + + Connection + Bağlantı + + + + Address + Adres + + + + Link + Bağlantı + + + + + Gateway + Ağ geçidi + + + + IPv4 configuration + IPv4 yapılandırması + + + + Static IP address + Statik IP adresi + + + + Automatic IP address (DHCP) + Otomatik IP adresi (DHCP) + + + + IP address + IP adresi + + + + Subnet mask + Alt ağ maskesi + + + + Static DNS servers + Statik DNS sunucuları + + + + Automatic DNS servers + Otomatik DNS sunucuları + + + + Primary DNS + Birincil DNS + + + + Secondary DNS + İkincil DNS + + + + Additional DNS + Ek DNS + + + + Interface details + Arayüz ayrıntıları + + + + Hostname + Ana makine adı + + + + MAC address + MAC adresi + + + + Initialization + Başlatma + + + + FirmwarePage + + + Firmware + Firmware + + + + Running version: + Çalışan sürüm: + + + + Details: + Detaylar: + + + + Recommended version: + Önerilen sürüm: + + + + Update: + Güncelleme: + + + + Start + Başlat + + + + Abort + İptal et + + + + Switch partition + Bölümü değiştir + + + + Update status: + Güncelleme durumu: + + + + Update progress: + Güncelleme ilerlemesi: + + + + Update message: + Mesajı güncelle: + + + + FlexibleEnergyTariffPage + + + Flexible energy tariff + Esnek enerji tarifesi + + + + ct/kWh + ct/kWh + + + + %1 %2 + %1 %2 + + + + No current price period available + Güncel fiyat dönemi mevcut değil + + + + %1–%2 + %1–%2 + + + + Could not load the tariff catalog (HTTP %1). + Tarife kataloğu (HTTP %1) yüklenemedi. + + + + The tariff catalog contains invalid data: %1 + Tarife kataloğu geçersiz veriler içeriyor: %1 + + + + %1 (%2 min) + %1 (%2 dk.) + + + + Charge when electricity is below your price limit. The charger downloads prices for the selected tariff and plans charging for the cheapest periods. + Elektrik fiyatı fiyat limitinizin altındayken şarj edin. Şarj cihazı seçilen tarifenin fiyatlarını indirir ve şarjı en ucuz dönemlere planlar. + + + + + Flexible tariff charging on + Esnek tarifeli şarj açık + + + + + Flexible tariff charging off + Esnek tarifeli şarj kapalı + + + + + + Price limit + Fiyat sınırı + + + + Selected tariff + Seçilen tarife + + + + Tariff ID %1 + Tarife Kimliği %1 + + + + %1 • %2 + %1 • %2 + + + + Electricity prices + Elektrik fiyatları + + + + Current price + Güncel fiyat + + + + Upcoming prices (%1 available) + Yaklaşan fiyatlar (%1 mevcut) + + + + Price forecast (%1) + Fiyat tahmini (%1) + + + + + + Tariff + Tarife + + + + Prices available until %1 + %1 tarihine kadar mevcut fiyatlar + + + + Lowest + En düşük + + + + Highest + En yüksek + + + + No future prices have been received from the charger yet. + Şarj cihazından henüz geleceğe yönelik bir fiyat alınmadı. + + + + Tariff selection + Tarife seçimi + + + + Loading available tariffs… + Mevcut tarifeler yükleniyor… + + + + Try again + Tekrar deneyin + + + + Country + Ülke + + + + Provider + Sağlayıcı + + + + This tariff publishes prices every 15 minutes. It requires charger firmware 60.0 or newer. + Bu tarife 15 dakikada bir fiyat yayınlamaktadır. Şarj cihazı ürün yazılımı 60.0 veya daha yenisini gerektirir. + + + + Save tariff + Tarifeyi kaydet + + + + GeneralOnOffSwitch + + + On + Açık + + + + Off + Kapalı + + + + Unknown + Bilinmiyor + + + + GeneralPage + + + General + Genel + + + + Name + İsim + + + + Switch Language + Dili Değiştir + + + + Notifications + Bildirimler + + + + Date and time + Tarih ve saat + + + + LED + LED + + + + Controller + Kontrol cihazı + + + + Display settings + Ekran ayarları + + + + Reboot + Yeniden başlat + + + + GridPage + + + Grid + Şebeke + + + + GroundCheckPage + + + Ground check + Topraklama kontrolü + + + + HardwareInformationPage + + + Hardware information + Donanım bilgileri + + + + Serial Number: + Seri numarası: + + + + Variant: + Varyant: + + + + RSSI: + RSSI: + + + + HotspotPage + + + Hotspot + Erişim noktası + + + + Hotspot on + Erişim noktası açık + + + + Hotspot off + Erişim noktası kapalı + + + + Configuration + Yapılandırma + + + + Turn hotspot off when another internet connection is available + Başka bir internet bağlantısı mevcut olduğunda erişim noktasını kapatın + + + + SSID + SSID + + + + Hotspot name + Erişim noktası adı + + + + Password + Şifre + + + + Custom password + Özel şifre + + + + Default password + Varsayılan şifre + + + + Unknown + Bilinmiyor + + + + Enter a new password + Yeni bir şifre girin + + + + Security + Güvenlik + + + + Open + Açık + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + Channel + Kanal + + + + Hotspot identity + Erişim noktası kimliği + + + + Hostname + Ana makine adı + + + + MAC address + MAC adresi + + + + InformationChartPanel + + + + Value + Değer + + + + Information + Bilgi + + + + %1 (%2) + %1 (%2) + + + + + + %1 %2 + %1 %2 + + + + InformationsTabPage + + + Category %1 + Kategori %1 + + + + Informations + Bilgiler + + + + Idle + Boşta + + + + HEADERS_RECEIVED + HEADERS_RECEIVED + + + + LOADING + YÜKLENİYOR + + + + %1 images + %1 görselleri + + + + %1 charts + %1 çizelgeleri + + + + Loaded %1 + %1 yüklendi + + + + No information data received + Hiçbir bilgi verisi alınmadı + + + + Request started... + Talep başlatıldı... + + + + Download informations + Bilgileri indir + + + + KwhLimitPage + + + kWh Limit + kWh Limiti + + + + LanguageSelector + + + + German + Almanca + + + + + Swedish + İsveççe + + + + + Finnish + Fince + + + + + Norwegian + Norveççe + + + + + Turkish + Türkçe + + + + + English + İngilizce + + + + System default (%1) + Sistem varsayılanı (%1) + + + + App language + Uygulama dili + + + + Numbers, dates, and times continue to use your system settings. + Sayılar, tarihler ve saatler sistem ayarlarınızı kullanmaya devam eder. + + + + LedPage + + + LED + LED + + + + LicensesPage + + + Licenses + Lisanslar + + + + LoadBalancingPage + + + Load Balancing + Yük Dengeleme + + + + MainScreen + + + %0 ago + %0 önce + + + + in %0 + %0'de + + + + + Charger + Şarj cihazı + + + + + Eco + Eko + + + + + Controller + Kontrol cihazı + + + + + + + Infromations + Bilgiler + + + + + + + Settings + Ayarlar + + + + MqttPage + + + MQTT + MQTT + + + + Broker URL + Aracı URL'si + + + + API documentation + API belgeleri + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md + + + + Trying to connect + Bağlanmaya çalışıyorum + + + + Connected + Bağlı + + + + Connected since + Şu tarihten beri bağlı: + + + + Command counter + Komut sayacı + + + + Last error + Son hata + + + + Last error age + Son hata yaşı + + + + Use global CA certificate store + Genel CA sertifika deposunu kullan + + + + Skip certificate common name check + Sertifika ortak adı kontrolünü atla + + + + Skip server certificate verification + Sunucu sertifikası doğrulamasını atla + + + + MQTT read-only + MQTT salt okunur + + + + Topic prefix + Konu öneki + + + + Home Assistant auto-discovery + Ev Asistanı otomatik keşif + + + + Home Assistant topic prefix + Ev Asistanı konu öneki + + + + NamePage + + + + Name + İsim + + + + NotificationsPage + + + Notifications + Bildirimler + + + + OcppPage + + + OCPP + OCPP + + + + Backend url + Arka uç URL'si + + + + API documentation + API belgeleri + + + + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + https://github.com/goecharger/go-eCharger-API-v2/blob/main/ocpp-en.md + + + + Trying to connect: + Bağlanmaya çalışıyorum: + + + + Is connected: + Bağlı: + + + + Connected since: + Şu tarihten beri bağlı: + + + + Is accepted: + Kabul edilir: + + + + Accepted since: + Şu tarihten beri kabul ediliyor: + + + + Last error: + Son hata: + + + + Last error age: + Son hata yaşı: + + + + Chargepoint status: + Şarj noktası durumu: + + + + Available + Mevcut + + + + Preparing + Hazırlanıyor + + + + Charging + Şarj ediliyor + + + + SuspendedEVSE + Şarj istasyonu tarafından duraklatıldı + + + + SuspendedEV + Araç tarafından duraklatıldı + + + + Finishing + Tamamlanıyor + + + + Reserved + Rezerve + + + + Unavailable + Mevcut değil + + + + Faulted + Arızalı + + + + Use global CA store + Genel CA mağazasını kullan + + + + Skip cert commonName check + Sertifika ortak adı kontrolünü atla + + + + Skip server cert verification + Sunucu sertifikası doğrulamasını atla + + + + + Accept time from backend + Arka uçtan zamanı kabul et + + + + Heartbeat interval: + Kalp atışı aralığı: + + + + MeterValues sample interval: + MeterValues örnek aralığı: + + + + Clock aligned data interval: + Saat hizalı veri aralığı: + + + + Dummy card id + Sahte kart kimliği + + + + Rotate phases on charger + Şarj cihazındaki fazları döndür + + + + Allow Offline Tx For UnknownId + UnknownId için Çevrimdışı Tx'ye İzin Ver + + + + Local Authorize Offline + Yerel Yetkilendirme Çevrimdışı + + + + Local Auth List Enabled + Yerel Kimlik Doğrulama Listesi Etkin + + + + Set as inoperable + Çalıştırılamaz olarak ayarla + + + + PasswordPage + + + Password + Şifre + + + + PvSurplusPage + + + PV surplus + PV fazlası + + + + %1 W + %1 W + + + + PV surplus charging on + PV fazlasıyla şarj açık + + + + PV surplus charging off + PV fazlasıyla şarj kapalı + + + + Charging behavior + Şarj davranışı + + + + Choose when surplus charging starts, stops, and how closely it follows the available power. + PV fazlasıyla şarjın ne zaman başlayıp duracağını ve mevcut gücü ne kadar yakından izleyeceğini seçin. + + + + Surplus required to start + Başlamak için gereken PV fazlası + + + + Surplus must be available for + PV fazlasının mevcut olması gereken süre + + + + + Allow charging to pause when surplus is insufficient + Fazlalık yetersiz olduğunda şarjın duraklatılmasına izin verin + + + + Minimum charging time before a pause + Duraklatmadan önceki minimum şarj süresi + + + + Power adjustment + Güç ayarı + + + + Prefer power from grid + Şebekeden güç almayı tercih et + + + + Round to nearest ampere + En yakın ampere yuvarla + + + + Prefer power to grid + Şebekeye güç vermeyi tercih et + + + + Recalculate from current surplus after a long interruption + Uzun bir kesintiden sonra mevcut PV fazlasından yeniden hesapla + + + + Phase switching + Faz geçişi + + + + Automatic switching can use one phase at low surplus and three phases at higher power. + Otomatik anahtarlama, düşük fazlalıkta bir fazı ve daha yüksek güçte üç fazı kullanabilir. + + + + Switch to three phases above + Bu değerin üzerinde üç faza geç + + + + New phase request must remain valid for + Yeni faz isteği şu süre boyunca geçerli kalmalıdır + + + + Minimum time between phase switches + Faz geçişleri arasındaki en kısa süre + + + + Phase-switch hysteresis + Faz değiştirme histerezisi + + + + Grid target and advanced tuning + Şebeke hedefi ve gelişmiş ayarlar + + + + These values fine-tune whether a small amount of power is imported from or exported to the grid. + Bu değerler, az miktarda gücün şebekeden alınıp alınmayacağını veya şebekeye aktarılıp aktarılmayacağını ayarlar. + + + + Grid power target + Şebeke güç hedefi + + + + Zero feed-in mode + Sıfır besleme modu + + + + Zero feed-in offset + Sıfır besleme ofseti + + + + Grid priority offset + Şebeke öncelik ofseti + + + + Stop hysteresis + Histerezi durdur + + + + RebootPage + + + Reboot + Yeniden başlat + + + + SchedulerDayPage + + + Scheduler day + Zamanlayıcı günü + + + + 24 Hour + 24 Saat + + + + SchedulerPage + + + Scheduler + Zamanlayıcı + + + + About Schedule + Program Hakkında + + + + Customize your charging routine on workdays, Saturdays, and Sundays. Define specific time slots for charging or blocking to perfectly align with your weekly schedule. Schedule can only start charging if all other functions like eco or access settings allow charging. + Şarj rutininizi iş günleri, cumartesi ve pazar günleri özelleştirin. Haftalık programınıza mükemmel şekilde uyum sağlamak için şarj etme veya engelleme için belirli zaman aralıkları tanımlayın. Program, yalnızca eko veya erişim ayarları gibi diğer tüm işlevlerin şarj etmeye izin vermesi durumunda şarj etmeye başlayabilir. + + + + Charging schedule + Şarj programı + + + + go-e Charger will exclusively charge your car during the time slots you set, and won't charge for the rest of the time. + go-e Charger, aracınızı yalnızca ayarladığınız zaman aralıklarında şarj edecek, geri kalan süre boyunca şarj etmeyecektir. + + + + Blocking schedule + Engelleme programı + + + + go-e Charger will block charging your car during the time slots you set, but it will charge your car for the rest of the time. + go-e Charger, belirlediğiniz zaman aralıklarında aracınızın şarj edilmesini engelleyecektir ancak geri kalan süre boyunca aracınızı şarj edecektir. + + + + Workdays + İş günleri + + + + Create workdays schedule + İş günleri programını oluştur + + + + Saturdays + cumartesi + + + + Create saturdays schedule + Cumartesi programını oluştur + + + + Sundays + Pazar günleri + + + + Create sundays schedule + Pazar günleri programı oluşturun + + + + SecurityPage + + + Security + Güvenlik + + + + Cable + Kablo + + + + Access + Erişim kontrolü + + + + Password + Şifre + + + + Grid + Şebeke + + + + Ground check + Topraklama kontrolü + + + + SelectLogicModeItem + + + Eco + Eko + + + + Eco-friendly & cost effective + Çevre dostu ve uygun maliyetli + + + + Basic + Temel + + + + Basic charging + Temel şarj + + + + Daily trip + Günlük gezi + + + + Specific energy and time + Spesifik enerji ve zaman + + + + SelectPhaseSwitchModeItem + + + Phase switching + Faz geçişi + + + + Automatic + Otomatik + + + + 1-Phase + 1 Fazlı + + + + 3-Phase + 3 Fazlı + + + + SendMessageHelper + + + No device connection set! + Cihaz bağlantısı ayarlanmadı! + + + + SensorsConfigurationPage + + + Sensors Configuration + Sensör Yapılandırması + + + + SetPriceLimitPage + + + Set price limit + Fiyat sınırını belirle + + + + Set a proper price limit for charging, so charging starts when the electricity price is below this limit. Also, you can see the charging forecast chart below based on the limit that you define. + Elektrik fiyatı bu limitin altına düştüğünde şarjın başlaması için uygun bir fiyat limiti belirleyin. Aşağıda belirlediğiniz limite göre şarj tahmini grafiğini de görebilirsiniz. + + + + Price limit + Fiyat sınırı + + + + %0 ct/kWh + %0 ct/kWh + + + + SettingsTabPage + + + Settings + Ayarlar + + + + Charging configuration + Şarj yapılandırması + + + + Charging Speed + Şarj Hızı + + + + kWh Limit + kWh Limiti + + + + Daily Trip + Günlük Gezi + + + + Flexible energy tariff + Esnek enerji tarifesi + + + + PV Surplus + PV fazlası + + + + Security + Güvenlik + + + + Cable + Kablo + + + + Access + Erişim kontrolü + + + + Password + Şifre + + + + Grid + Şebeke + + + + Ground check + Topraklama kontrolü + + + + Sensors Configuration + Sensör Yapılandırması + + + + Sensors + Sensörler + + + + Categories + Kategoriler + + + + Connection + Bağlantı + + + + Wi-Fi + Wi-Fi + + + + Cellular + Mobil ağ + + + + Hotspot + Erişim noktası + + + + Ethernet + Ethernet + + + + Cloud + Bulut + + + + OCPP + OCPP + + + + MQTT + MQTT + + + + API Settings + API Ayarları + + + + General + Genel + + + + Name + İsim + + + + Switch Language + Dili Değiştir + + + + Notifications + Bildirimler + + + + Date and time + Tarih ve saat + + + + LED + LED + + + + Controller + Kontrol cihazı + + + + Display settings + Ekran ayarları + + + + About + Hakkında + + + + Firmware + Firmware + + + + Hardware information + Donanım bilgileri + + + + Licenses + Lisanslar + + + + StartStopButton + + + Stop + Durdur + + + + Start + Başlat + + + + SwitchLanguagePage + + + Switch Language + Dili Değiştir + + + + TimePickerLabel + + + AM + ÖÖ + + + + PM + ÖS + + + + WiFiErrorsPage + + + Wi-Fi Errors + Wi-Fi Hataları + + + + Timestamp: + Zaman damgası: + + + + SSID: + SSID: + + + + BSSID: + BSSID: + + + + Reason: + Sebep: + + + + WiFiPage + + + Wi-Fi + Wi-Fi + + + + Open + Açık + + + + WEP + WEP + + + + WPA + WPA + + + + WPA2 + WPA2 + + + + WPA/WPA2 + WPA/WPA2 + + + + WPA2 Enterprise + WPA2 Kurumsal + + + + WPA3 + WPA3 + + + + WPA2/WPA3 + WPA2/WPA3 + + + + WAPI + WAPI + + + + OWE + OWE + + + + WPA3 Enterprise + WPA3 Kurumsal + + + + WPA3 External PSK + WPA3 Harici PSK + + + + WPA3 External PSK mixed + WPA3 Harici PSK karışımı + + + + Unknown security + Bilinmeyen güvenlik + + + + + Idle + Boşta + + + + Network not found + Ağ bulunamadı + + + + Scan completed + Tarama tamamlandı + + + + + Connected + Bağlı + + + + Connection failed + Bağlantı başarısız oldu + + + + Connection lost + Bağlantı kesildi + + + + Disconnected + Bağlantı kesildi + + + + + Connecting + Bağlanıyor + + + + Disconnecting + Bağlantı kesiliyor + + + + Wi-Fi unavailable + Wi-Fi kullanılamıyor + + + + Waiting for IP address + IP adresi bekleniyor + + + + + + Unknown + Bilinmiyor + + + + Not scanned yet + Henüz taranmadı + + + + + Scanning + Tarama + + + + Finished + Bitti + + + + Failed + Başarısız + + + + The Wi-Fi configuration has not been received yet. + Wi-Fi yapılandırması henüz alınmadı. + + + + All Wi-Fi configuration slots are occupied. Delete a configured network first. + Tüm Wi-Fi yapılandırma yuvaları dolu. Önce yapılandırılmış bir ağı silin. + + + + Are you sure? + Emin misin? + + + + Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud! + Wi-Fi'yi devre dışı bırakmak, cihazınıza yerel ev ağınızdan veya buluttan erişilemez hale gelebilir! + + + + Connection + Bağlantı + + + + Status + Durum + + + + Network + Ağ + + + + Not connected + Bağlı değil + + + + Unknown network + Bilinmeyen ağ + + + + Signal + Sinyal + + + + Wi-Fi scan + Wi-Fi taraması + + + + Last scan + Son tarama + + + + Never + Asla + + + + Configured networks + Yapılandırılmış ağlar + + + + Scanning… + Tarama… + + + + Scan again + Tekrar tarayın + + + + No configured networks + Yapılandırılmış ağ yok + + + + Static IP %1 + Statik IP %1 + + + + Automatic IP + Otomatik IP + + + + Custom password + Özel şifre + + + + Default password + Varsayılan şifre + + + + slot %1 + yuva %1 + + + + Delete + Sil + + + + Available networks + Mevcut ağlar + + + + Saved • %1 + Kaydedildi • %1 + + + + Signal strength %1 dBm + Sinyal gücü %1 dBm + + + + No networks found. Start another scan. + Hiçbir ağ bulunamadı. Başka bir tarama başlatın. + + + + (%0) Wi-Fi Errors + (%0) Wi-Fi Hataları + + + + Advanced Wi-Fi settings + Gelişmiş Wi-Fi ayarları + + + + Min RSSI + Minimum RSSI + + + + Support protected management frames + Korumalı yönetim çerçevelerini destekleyin + + + + Require protected management frames + Korumalı yönetim çerçeveleri gerektir + + + + Technical details + Teknik detaylar + + + + Addressing + Adresleme + + + + IP %1 + IP %1 + + + + mask %1 + maske %1 + + + + gateway %1 + ağ geçidi %1 + + + + Access point + Erişim noktası + + + + channel %1 + kanal %1 + + + + Connection process + Bağlantı süreci + + + + MAC address + MAC adresi + + + + Hostname + Ana makine adı + + + + Connection errors + Bağlantı hataları + + + + Connect to Wi-Fi + Wi-Fi'ye bağlanın + + + + Password + Şifre + + + + Show password + Şifreyi göster + + + + The password must contain at least 8 characters. + Şifre en az 8 karakter içermelidir. + + + + This network does not require a password. + Bu ağ şifre gerektirmez. + + + + The network will be saved in slot %1. + Ağ, %1 yuvasına kaydedilecektir. + + + + Delete Wi-Fi network? + Wi-Fi ağı silinsin mi? + + + + Delete %1 and all of its IP and DNS settings? + %1 ve tüm IP ve DNS ayarları silinsin mi? + + + + Cannot add Wi-Fi network + Wi-Fi ağı eklenemiyor + + + diff --git a/evcharger-app/main.cpp b/evcharger-app/main.cpp index 577a0f3..ffffd97 100644 --- a/evcharger-app/main.cpp +++ b/evcharger-app/main.cpp @@ -1,7 +1,10 @@ -#include -#include -#include -#include +#include +#include +#include +#include +#include + +#include "appsettings.h" int main(int argc, char *argv[]) { @@ -20,15 +23,38 @@ int main(int argc, char *argv[]) QCoreApplication::setOrganizationDomain("brunner.ninja"); QCoreApplication::setApplicationName("evcharger-app"); - QApplication app(argc, argv); - - QTranslator translator; - if (!translator.load(QLocale(), "qml", "_", ":/EVChargerApp/i18n/")) - qWarning("could not load translations!"); - app.installTranslator(&translator); - - QQmlApplicationEngine engine; - QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed, + QApplication app(argc, argv); + + AppSettings settings; + QTranslator translator; + QQmlApplicationEngine engine; + + const auto applyUiLanguage = [&](QLocale::Language language) { + app.removeTranslator(&translator); + + const QLocale translationLocale = language == QLocale::AnyLanguage + ? QLocale::system() + : QLocale(language); + + // English is the source language. Missing catalogs naturally fall back + // to English. QLocale's formatting locale remains untouched. + if (translationLocale.language() != QLocale::English + && translator.load(translationLocale, + QStringLiteral("qml"), + QStringLiteral("_"), + QStringLiteral(":/EVChargerApp/i18n/"))) + app.installTranslator(&translator); + + if (!engine.rootObjects().isEmpty()) + engine.retranslate(); + }; + + applyUiLanguage(settings.uiLanguage()); + QObject::connect(&settings, &AppSettings::uiLanguageChanged, + &engine, applyUiLanguage); + + engine.rootContext()->setContextProperty(QStringLiteral("theSettings"), &settings); + QObject::connect(&engine, &QQmlApplicationEngine::objectCreationFailed, [](const QUrl &url){ qFatal("object creation failed: %s", qPrintable(url.toString())); }); diff --git a/evcharger-app/qml/ApiStatusRow.qml b/evcharger-app/qml/ApiStatusRow.qml index 5b5ff5a..6da79dd 100644 --- a/evcharger-app/qml/ApiStatusRow.qml +++ b/evcharger-app/qml/ApiStatusRow.qml @@ -28,12 +28,10 @@ RowLayout { apiKey: row.apiKey } - Label { - Layout.preferredWidth: 125 - Layout.maximumWidth: 125 + SettingsLabel { + Layout.preferredWidth: Math.min(125, row.width * 0.42) + Layout.maximumWidth: Math.min(125, row.width * 0.42) text: row.label - font.bold: true - wrapMode: Text.Wrap } Text { diff --git a/evcharger-app/qml/AppSettingsPage.qml b/evcharger-app/qml/AppSettingsPage.qml index 69b97b6..510385f 100644 --- a/evcharger-app/qml/AppSettingsPage.qml +++ b/evcharger-app/qml/AppSettingsPage.qml @@ -11,6 +11,13 @@ NavigationPage { return false } + SettingsSectionLabel { + text: qsTr("Language") + } + + LanguageSelector { + } + WhiteBox { Layout.fillWidth: true diff --git a/evcharger-app/qml/AppTheme.qml b/evcharger-app/qml/AppTheme.qml new file mode 100644 index 0000000..f670b8a --- /dev/null +++ b/evcharger-app/qml/AppTheme.qml @@ -0,0 +1,11 @@ +pragma Singleton + +import QtQuick + +QtObject { + readonly property bool settingsLabelBold: true + readonly property int cardRadius: 8 + readonly property color cardColor: "white" + readonly property color cardPressedColor: "#f1f1f1" + readonly property color sectionLabelColor: "#5f6368" +} diff --git a/evcharger-app/qml/BaseNavigationPage.qml b/evcharger-app/qml/BaseNavigationPage.qml index 7f0a8b3..71a204b 100644 --- a/evcharger-app/qml/BaseNavigationPage.qml +++ b/evcharger-app/qml/BaseNavigationPage.qml @@ -18,15 +18,26 @@ Item { id: headerLayout Layout.fillWidth: true + spacing: 0 - Button { + ToolButton { text: qsTr("Back") + icon.source: "material-icons/arrow_back.svg" + display: AbstractButton.IconOnly visible: stackView.depth > 1 + Layout.preferredWidth: 48 + Layout.preferredHeight: 48 + Accessible.name: text + Accessible.description: qsTr("Return to the previous screen") + ToolTip.visible: hovered + ToolTip.text: text onClicked: stackView.pop() } TitleText { Layout.fillWidth: true + leftPadding: 8 + rightPadding: 8 id: titleText } diff --git a/evcharger-app/qml/CloudPage.qml b/evcharger-app/qml/CloudPage.qml index 31df596..f886554 100644 --- a/evcharger-app/qml/CloudPage.qml +++ b/evcharger-app/qml/CloudPage.qml @@ -10,69 +10,46 @@ NavigationPage { apiKey: "cwe" text: qsTr("Enable cloud connection") dialogTitle: qsTr("Are you sure?") - dialogText: qsTr("Disabling could connection could make your device unreachable from other places than home!") + dialogText: qsTr("Disabling the cloud connection could make your device unreachable from outside your home network!") } Text { Layout.fillWidth: true wrapMode: Text.Wrap - text: qsTr("Features like flexible energy tariffs, time sync and app connection are unavilable when \"Enable cloud connection\" is disabled") + text: qsTr("Features such as flexible energy tariffs, time synchronization, and remote app access are unavailable when the cloud connection is disabled.") } - WhiteBox { - Layout.fillWidth: true + SettingsCard { + ApiStatusRow { + apiKey: "cws" + label: qsTr("Trying to connect") + } - GridLayout { - anchors.fill: parent - columns: 2 + ApiStatusRow { + apiKey: "cwsc" + label: qsTr("Connected") + } - Text { - text: qsTr("Trying to connect:") - font.bold: true - } + // TODO cwsca - ApiKeyValueItem { - apiKey: "cws" - } + ApiStatusRow { + apiKey: "chr" + label: qsTr("Hello received") + } - Text { - text: qsTr("Is connected:") - font.bold: true - } + ApiStatusRow { + apiKey: "qsc" + label: qsTr("Cloud queue size") + } - ApiKeyValueItem { - apiKey: "cwsc" - } + SettingsLabel { + Layout.fillWidth: true + text: qsTr("Last error") + } - // TODO cwsca - - Text { - text: qsTr("Hello received:") - font.bold: true - } - - ApiKeyValueItem { - apiKey: "chr" - } - - Text { - text: qsTr("Queue size cloud:") - font.bold: true - } - - ApiKeyValueItem { - apiKey: "qsc" - } - - Text { - text: qsTr("Last error:") - font.bold: true - } - - ApiKeyValueItem { - apiKey: "cle" - wrapMode: Text.Wrap - } + ApiKeyValueItem { + apiKey: "cle" + wrapMode: Text.Wrap } } } diff --git a/evcharger-app/qml/ConfirmingOnOffSwitch.qml b/evcharger-app/qml/ConfirmingOnOffSwitch.qml index d85bbfa..9803ad4 100644 --- a/evcharger-app/qml/ConfirmingOnOffSwitch.qml +++ b/evcharger-app/qml/ConfirmingOnOffSwitch.qml @@ -12,10 +12,6 @@ WhiteCheckDelegate { Layout.fillWidth: true - Component.onCompleted: { - contentItem.children[0].wrapMode = Text.Wrap - } - ApiKeyValueHelper { id: apiKeyValueHelper deviceConnection: theDeviceConnection diff --git a/evcharger-app/qml/EVChargerApp.qml b/evcharger-app/qml/EVChargerApp.qml index 18d342d..74649c7 100644 --- a/evcharger-app/qml/EVChargerApp.qml +++ b/evcharger-app/qml/EVChargerApp.qml @@ -1,7 +1,6 @@ -import QtQuick -import QtQuick.Controls.Material -import QtQuick.Layouts -import EVChargerApp +import QtQuick +import QtQuick.Controls.Material +import EVChargerApp ApplicationWindow { id: window @@ -12,11 +11,7 @@ ApplicationWindow { title: qsTr("EVcharger App") color: "#F3F2F7" - AppSettings { - id: theSettings - } - - DevicesModel { + DevicesModel { id: devicesModel settings: theSettings @@ -29,12 +24,13 @@ ApplicationWindow { source: "ui-icons/MaterialIcons-Regular.ttf" } - SwipeView { - id: view - - anchors.fill: parent - - currentIndex: indicator.currentIndex + SwipeView { + id: view + + anchors.fill: parent + // App instances are switched explicitly with three fingers. This keeps + // one-finger horizontal gestures available to controls inside them. + interactive: false Repeater { model: theSettings.numberOfAppInstances @@ -46,8 +42,8 @@ ApplicationWindow { } } - PageIndicator { - id: indicator + PageIndicator { + id: indicator visible: view.count > 1 @@ -55,18 +51,133 @@ ApplicationWindow { currentIndex: view.currentIndex anchors.top: view.top - anchors.horizontalCenter: parent.horizontalCenter - } - - function backPressed() { + anchors.horizontalCenter: parent.horizontalCenter + } + + // Two fingers switch the UI language; three fingers switch app instances. + // Exact point counts keep one-finger gestures available to page content. + Item { + anchors.fill: parent + z: 1000 + + DragHandler { + id: languageSwipe + + target: null + acceptedDevices: PointerDevice.TouchScreen + minimumPointCount: 2 + maximumPointCount: 2 + + property real lastHorizontalDistance: 0 + property real lastVerticalDistance: 0 + property bool gestureCanceled: false + + onActiveTranslationChanged: { + if (active) { + lastHorizontalDistance = activeTranslation.x + lastVerticalDistance = activeTranslation.y + } + } + + onActiveChanged: { + if (active) { + lastHorizontalDistance = 0 + lastVerticalDistance = 0 + gestureCanceled = false + return + } + + if (!gestureCanceled + && Math.abs(lastHorizontalDistance) >= 72 + && Math.abs(lastHorizontalDistance) > Math.abs(lastVerticalDistance) * 1.5) + window.cycleUiLanguage(lastHorizontalDistance) + } + + onCanceled: (point) => { + gestureCanceled = true + } + } + + DragHandler { + id: appInstanceSwipe + + target: null + enabled: view.count > 1 + acceptedDevices: PointerDevice.TouchScreen + minimumPointCount: 3 + maximumPointCount: 3 + + property real lastHorizontalDistance: 0 + property real lastVerticalDistance: 0 + property bool gestureCanceled: false + + onActiveTranslationChanged: { + if (active) { + lastHorizontalDistance = activeTranslation.x + lastVerticalDistance = activeTranslation.y + } + } + + onActiveChanged: { + if (active) { + lastHorizontalDistance = 0 + lastVerticalDistance = 0 + gestureCanceled = false + return + } + + if (!gestureCanceled + && Math.abs(lastHorizontalDistance) >= 72 + && Math.abs(lastHorizontalDistance) > Math.abs(lastVerticalDistance) * 1.5) + window.switchAppInstance(lastHorizontalDistance) + } + + onCanceled: (point) => { + gestureCanceled = true + } + } + } + + function effectiveUiLanguage() { + if (theSettings.uiLanguage !== AppSettings.SystemLanguage) + return theSettings.uiLanguage + const languageCode = Qt.locale().name.substring(0, 2).toLowerCase() + switch (languageCode) { + case "de": return AppSettings.GermanLanguage + case "sv": return AppSettings.SwedishLanguage + case "fi": return AppSettings.FinnishLanguage + case "nb": + case "nn": + case "no": return AppSettings.NorwegianLanguage + case "tr": return AppSettings.TurkishLanguage + default: return AppSettings.EnglishLanguage + } + } + + function cycleUiLanguage(horizontalDistance) { + const languages = [AppSettings.GermanLanguage, AppSettings.EnglishLanguage, + AppSettings.SwedishLanguage, AppSettings.FinnishLanguage, + AppSettings.NorwegianLanguage, AppSettings.TurkishLanguage] + const currentIndex = languages.indexOf(effectiveUiLanguage()) + const direction = horizontalDistance < 0 ? 1 : -1 + const nextIndex = (currentIndex + direction + languages.length) % languages.length + theSettings.uiLanguage = languages[nextIndex] + } + + function switchAppInstance(horizontalDistance) { + const direction = horizontalDistance < 0 ? 1 : -1 + view.currentIndex = Math.max(0, Math.min(view.count - 1, + view.currentIndex + direction)) + } + + function backPressed() { if (view.currentItem.backPressed()) return true - if (view.currentIndex > 0) { - view.currentIndex = 0 - view.currentIndex = Qt.binding(() => indicator.currentIndex) - return true - } + if (view.currentIndex > 0) { + view.currentIndex = 0 + return true + } return false } diff --git a/evcharger-app/qml/EditValueItem.qml b/evcharger-app/qml/EditValueItem.qml index 25d339f..857df61 100644 --- a/evcharger-app/qml/EditValueItem.qml +++ b/evcharger-app/qml/EditValueItem.qml @@ -29,10 +29,9 @@ WhiteItemDelegate { } contentItem: RowLayout { - Text { + SettingsLabel { wrapMode: Text.Wrap Layout.fillWidth: true - font.bold: true text: itemDelegate.text } diff --git a/evcharger-app/qml/EthernetPage.qml b/evcharger-app/qml/EthernetPage.qml index 2d85612..234cb97 100644 --- a/evcharger-app/qml/EthernetPage.qml +++ b/evcharger-app/qml/EthernetPage.qml @@ -41,47 +41,34 @@ NavigationPage { text: checked ? qsTr("Ethernet on") : qsTr("Ethernet off") } - WhiteBox { - Layout.fillWidth: true - implicitHeight: connectionStatus.implicitHeight + 20 + SettingsSectionLabel { + text: qsTr("Connection") + } - ColumnLayout { - id: connectionStatus - anchors.fill: parent - anchors.margins: 10 + SettingsCard { + ApiStatusRow { + apiKey: "cce" + label: qsTr("Address") + valueFormatter: function(value) { return connectionText(value) } + } - Text { - Layout.fillWidth: true - text: qsTr("Connection") - font.bold: true - } + ApiStatusRow { + apiKey: "cce" + label: qsTr("Link") + valueFormatter: function(value) { return linkText(value) } + } - ApiStatusRow { - apiKey: "cce" - label: qsTr("Address") - valueFormatter: function(value) { return connectionText(value) } - } - - ApiStatusRow { - apiKey: "cce" - label: qsTr("Link") - valueFormatter: function(value) { return linkText(value) } - } - - ApiStatusRow { - apiKey: "cce" - label: qsTr("Gateway") - valueFormatter: function(value) { - return value && value.gw ? value.gw : "—" - } + ApiStatusRow { + apiKey: "cce" + label: qsTr("Gateway") + valueFormatter: function(value) { + return value && value.gw ? value.gw : "—" } } } - Text { - Layout.fillWidth: true + SettingsSectionLabel { text: qsTr("IPv4 configuration") - font.bold: true } GeneralOnOffSwitch { @@ -171,39 +158,30 @@ NavigationPage { } } - WhiteBox { - Layout.fillWidth: true - implicitHeight: ethernetDetails.implicitHeight + 20 + SettingsSectionLabel { + visible: ethernetHostname.exists || ethernetMac.exists || ethernetInit.exists + text: qsTr("Interface details") + } + + SettingsCard { visible: ethernetHostname.exists || ethernetMac.exists || ethernetInit.exists - ColumnLayout { - id: ethernetDetails - anchors.fill: parent - anchors.margins: 10 + ApiStatusRow { + id: ethernetHostname + apiKey: "hste" + label: qsTr("Hostname") + } - Text { - Layout.fillWidth: true - text: qsTr("Interface details") - font.bold: true - } + ApiStatusRow { + id: ethernetMac + apiKey: "mace" + label: qsTr("MAC address") + } - ApiStatusRow { - id: ethernetHostname - apiKey: "hste" - label: qsTr("Hostname") - } - - ApiStatusRow { - id: ethernetMac - apiKey: "mace" - label: qsTr("MAC address") - } - - ApiStatusRow { - id: ethernetInit - apiKey: "eis" - label: qsTr("Initialization") - } + ApiStatusRow { + id: ethernetInit + apiKey: "eis" + label: qsTr("Initialization") } } diff --git a/evcharger-app/qml/GeneralOnOffSwitch.qml b/evcharger-app/qml/GeneralOnOffSwitch.qml index caa73b5..bb3b130 100644 --- a/evcharger-app/qml/GeneralOnOffSwitch.qml +++ b/evcharger-app/qml/GeneralOnOffSwitch.qml @@ -12,10 +12,6 @@ WhiteCheckDelegate { Layout.fillWidth: true - Component.onCompleted: { - contentItem.children[0].wrapMode = Text.Wrap - } - ApiKeyValueHelper { id: valueHelper deviceConnection: theDeviceConnection diff --git a/evcharger-app/qml/HotspotPage.qml b/evcharger-app/qml/HotspotPage.qml index baae96a..037363f 100644 --- a/evcharger-app/qml/HotspotPage.qml +++ b/evcharger-app/qml/HotspotPage.qml @@ -12,10 +12,8 @@ NavigationPage { text: checked ? qsTr("Hotspot on") : qsTr("Hotspot off") } - Text { - Layout.fillWidth: true + SettingsSectionLabel { text: qsTr("Configuration") - font.bold: true } GeneralOnOffSwitch { @@ -77,33 +75,24 @@ NavigationPage { } } - WhiteBox { - Layout.fillWidth: true - implicitHeight: hotspotStatus.implicitHeight + 20 + SettingsSectionLabel { + visible: hotspotHostname.exists || hotspotMac.exists + text: qsTr("Hotspot identity") + } + + SettingsCard { visible: hotspotHostname.exists || hotspotMac.exists - ColumnLayout { - id: hotspotStatus - anchors.fill: parent - anchors.margins: 10 + ApiStatusRow { + id: hotspotHostname + apiKey: "hsta" + label: qsTr("Hostname") + } - Text { - Layout.fillWidth: true - text: qsTr("Hotspot identity") - font.bold: true - } - - ApiStatusRow { - id: hotspotHostname - apiKey: "hsta" - label: qsTr("Hostname") - } - - ApiStatusRow { - id: hotspotMac - apiKey: "maca" - label: qsTr("MAC address") - } + ApiStatusRow { + id: hotspotMac + apiKey: "maca" + label: qsTr("MAC address") } } } diff --git a/evcharger-app/qml/LanguageSelector.qml b/evcharger-app/qml/LanguageSelector.qml new file mode 100644 index 0000000..ddb1a80 --- /dev/null +++ b/evcharger-app/qml/LanguageSelector.qml @@ -0,0 +1,130 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts +import EVChargerApp +import EVChargerApp as App + +SettingsCard { + id: selector + + function languageForLocale(localeName) { + const languageCode = localeName.substring(0, 2).toLowerCase() + switch (languageCode) { + case "de": return AppSettings.GermanLanguage + case "sv": return AppSettings.SwedishLanguage + case "fi": return AppSettings.FinnishLanguage + case "nb": + case "nn": + case "no": return AppSettings.NorwegianLanguage + case "tr": return AppSettings.TurkishLanguage + default: return AppSettings.EnglishLanguage + } + } + + function languageName(language) { + switch (language) { + case AppSettings.GermanLanguage: return qsTr("German") + case AppSettings.SwedishLanguage: return qsTr("Swedish") + case AppSettings.FinnishLanguage: return qsTr("Finnish") + case AppSettings.NorwegianLanguage: return qsTr("Norwegian") + case AppSettings.TurkishLanguage: return qsTr("Turkish") + default: return qsTr("English") + } + } + + readonly property int systemLanguage: languageForLocale(Qt.locale().name) + readonly property var languageChoices: [ + { + value: AppSettings.SystemLanguage, + text: qsTr("System default (%1)").arg(languageName(systemLanguage)), + icon: "flags/system.svg" + }, + { value: AppSettings.GermanLanguage, text: qsTr("German"), icon: "flags/de.svg" }, + { value: AppSettings.EnglishLanguage, text: qsTr("English"), icon: "flags/gb.svg" }, + { value: AppSettings.SwedishLanguage, text: qsTr("Swedish"), icon: "flags/se.svg" }, + { value: AppSettings.FinnishLanguage, text: qsTr("Finnish"), icon: "flags/fi.svg" }, + { value: AppSettings.NorwegianLanguage, text: qsTr("Norwegian"), icon: "flags/no.svg" }, + { value: AppSettings.TurkishLanguage, text: qsTr("Turkish"), icon: "flags/tr.svg" } + ] + + SettingsLabel { + text: qsTr("App language") + } + + ComboBox { + id: languageCombo + + Layout.fillWidth: true + model: selector.languageChoices + textRole: "text" + valueRole: "value" + + function synchronizeLanguage() { + const selectedIndex = indexOfValue(theSettings.uiLanguage) + if (selectedIndex >= 0) + currentIndex = selectedIndex + } + + Component.onCompleted: synchronizeLanguage() + onModelChanged: synchronizeLanguage() + onActivated: theSettings.uiLanguage = currentValue + + delegate: ItemDelegate { + id: languageDelegate + + required property int index + required property var modelData + + width: languageCombo.width + highlighted: languageCombo.highlightedIndex === index + + contentItem: RowLayout { + spacing: 10 + + Image { + Layout.preferredWidth: 28 + Layout.preferredHeight: 20 + source: languageDelegate.modelData.icon + fillMode: Image.PreserveAspectFit + } + + Label { + Layout.fillWidth: true + text: languageDelegate.modelData.text + elide: Text.ElideRight + } + } + } + + contentItem: RowLayout { + spacing: 10 + + Image { + Layout.preferredWidth: 28 + Layout.preferredHeight: 20 + source: languageCombo.currentIndex >= 0 + ? selector.languageChoices[languageCombo.currentIndex].icon : "" + fillMode: Image.PreserveAspectFit + } + + Label { + Layout.fillWidth: true + text: languageCombo.displayText + elide: Text.ElideRight + verticalAlignment: Text.AlignVCenter + } + } + + Connections { + target: theSettings + function onUiLanguageChanged() { languageCombo.synchronizeLanguage() } + } + } + + Text { + Layout.fillWidth: true + text: qsTr("Numbers, dates, and times continue to use your system settings.") + color: App.AppTheme.sectionLabelColor + wrapMode: Text.Wrap + } +} diff --git a/evcharger-app/qml/MqttPage.qml b/evcharger-app/qml/MqttPage.qml index 256fa98..fead033 100644 --- a/evcharger-app/qml/MqttPage.qml +++ b/evcharger-app/qml/MqttPage.qml @@ -11,7 +11,7 @@ NavigationPage { } EditValueItem { - text: qsTr("Broker url") + text: qsTr("Broker URL") apiKey: "mcu" fullWidth: true editableItem: TextField { @@ -25,95 +25,62 @@ NavigationPage { url: qsTr("https://github.com/goecharger/go-eCharger-API-v2/blob/main/mqtt-en.md") } - WhiteBox { - Layout.fillWidth: true + SettingsCard { + ApiStatusRow { + apiKey: "mcs" + label: qsTr("Trying to connect") + } - GridLayout { - anchors.fill: parent - columns: 2 + ApiStatusRow { + apiKey: "mcc" + label: qsTr("Connected") + } - Text { - text: qsTr("Trying to connect:") - font.bold: true + ApiStatusRow { + apiKey: "mcca" + label: qsTr("Connected since") + valueFormatter: function(value) { + return value ? formatDuration(value - rebootTime.value) : "—" } + } - ApiKeyValueItem { - apiKey: "mcs" - } + ApiStatusRow { + apiKey: "mcsl" + label: qsTr("Command counter") + } - Text { - text: qsTr("Is connected:") - font.bold: true - } + SettingsLabel { + Layout.fillWidth: true + text: qsTr("Last error") + } - ApiKeyValueItem { - apiKey: "mcc" - } + ApiKeyValueItem { + apiKey: "mlr" + wrapMode: Text.Wrap + } - Text { - text: qsTr("Connected since:") - font.bold: true - } - - ApiKeyValueHelper { - id: connectedSince - deviceConnection: theDeviceConnection - apiKey: "mcca" - } - - Text { - text: connectedSince.value ? formatDuration(connectedSince.value - rebootTime.value) : "" - } - - Text { - text: qsTr("Command Counter:") - font.bold: true - } - - ApiKeyValueItem { - apiKey: "mcsl" - } - - Text { - text: qsTr("Last error:") - font.bold: true - } - - ApiKeyValueItem { - apiKey: "mlr" - wrapMode: Text.Wrap - } - - Text { - text: qsTr("Last error age:") - font.bold: true - } - - ApiKeyValueHelper { - id: lastErrorAge - deviceConnection: theDeviceConnection - apiKey: "mlra" - } - - Text { - text: lastErrorAge.value ? formatDuration(lastErrorAge.value - rebootTime.value) : "" + ApiStatusRow { + apiKey: "mlra" + label: qsTr("Last error age") + valueFormatter: function(value) { + return value ? formatDuration(value - rebootTime.value) : "—" } } } GeneralOnOffSwitch { apiKey: "mqg" - text: qsTr("Use global CA store") + text: qsTr("Use global CA certificate store") } GeneralOnOffSwitch { apiKey: "mqcn" - text: qsTr("Skip cert commonName check") + text: qsTr("Skip certificate common name check") } GeneralOnOffSwitch { apiKey: "mqss" - text: qsTr("Skip server cert verification") + text: qsTr("Skip server certificate verification") } // TODO clientKey @@ -124,7 +91,7 @@ NavigationPage { GeneralOnOffSwitch { apiKey: "mcr" - text: qsTr("MQTT readonly") + text: qsTr("MQTT read-only") } EditValueItem { @@ -141,13 +108,13 @@ NavigationPage { GeneralOnOffSwitch { id: homeassistant apiKey: "mhe" - text: qsTr("Homeassistant autodiscover") + text: qsTr("Home Assistant auto-discovery") } EditValueItem { visible: homeassistant.checked // TODO allow set to null to reset to default - text: qsTr("Homeassistant topic prefix") + text: qsTr("Home Assistant topic prefix") apiKey: "mht" fullWidth: true editableItem: TextField { diff --git a/evcharger-app/qml/SettingsCard.qml b/evcharger-app/qml/SettingsCard.qml new file mode 100644 index 0000000..ea19b9f --- /dev/null +++ b/evcharger-app/qml/SettingsCard.qml @@ -0,0 +1,14 @@ +import QtQuick +import QtQuick.Controls +import QtQuick.Layouts + +WhiteBox { + default property alias contents: contentLayout.data + + Layout.fillWidth: true + + contentItem: ColumnLayout { + id: contentLayout + spacing: 6 + } +} diff --git a/evcharger-app/qml/SettingsLabel.qml b/evcharger-app/qml/SettingsLabel.qml new file mode 100644 index 0000000..4b0d7c8 --- /dev/null +++ b/evcharger-app/qml/SettingsLabel.qml @@ -0,0 +1,8 @@ +import QtQuick +import QtQuick.Controls +import EVChargerApp as App + +Label { + font.bold: App.AppTheme.settingsLabelBold + wrapMode: Text.Wrap +} diff --git a/evcharger-app/qml/SettingsSectionLabel.qml b/evcharger-app/qml/SettingsSectionLabel.qml new file mode 100644 index 0000000..6bae088 --- /dev/null +++ b/evcharger-app/qml/SettingsSectionLabel.qml @@ -0,0 +1,12 @@ +import QtQuick +import QtQuick.Layouts +import EVChargerApp +import EVChargerApp as App + +SettingsLabel { + Layout.fillWidth: true + Layout.topMargin: 8 + leftPadding: 4 + rightPadding: 4 + color: App.AppTheme.sectionLabelColor +} diff --git a/evcharger-app/qml/SwitchLanguagePage.qml b/evcharger-app/qml/SwitchLanguagePage.qml index 7dfa5d6..73719c6 100644 --- a/evcharger-app/qml/SwitchLanguagePage.qml +++ b/evcharger-app/qml/SwitchLanguagePage.qml @@ -5,9 +5,6 @@ import QtQuick.Layouts NavigationPage { title: qsTr("Switch Language") - Text { - text: "TODO" - - Layout.fillHeight: true + LanguageSelector { } } diff --git a/evcharger-app/qml/WhiteBox.qml b/evcharger-app/qml/WhiteBox.qml index 39e5e68..fd018c9 100644 --- a/evcharger-app/qml/WhiteBox.qml +++ b/evcharger-app/qml/WhiteBox.qml @@ -1,11 +1,10 @@ import QtQuick import QtQuick.Controls -import QtQuick.Layouts -import EVChargerApp +import EVChargerApp as App Pane { - Component.onCompleted: { - background.color = "white" - background.radius = 5 + background: Rectangle { + color: App.AppTheme.cardColor + radius: App.AppTheme.cardRadius } } diff --git a/evcharger-app/qml/WhiteCheckDelegate.qml b/evcharger-app/qml/WhiteCheckDelegate.qml index 4d71a9a..13372db 100644 --- a/evcharger-app/qml/WhiteCheckDelegate.qml +++ b/evcharger-app/qml/WhiteCheckDelegate.qml @@ -1,10 +1,22 @@ import QtQuick import QtQuick.Controls -import QtQuick.Layouts +import EVChargerApp as App CheckDelegate { + id: control + + font.bold: App.AppTheme.settingsLabelBold + Component.onCompleted: { - background.color = "white" - background.radius = 5 + // The style-owned IconLabel does not expose its wrapping mode. Keep the + // workaround here so every derived settings switch behaves alike. + if (contentItem.children.length > 0) + contentItem.children[0].wrapMode = Text.Wrap + } + + background: Rectangle { + implicitHeight: 48 + color: control.down ? App.AppTheme.cardPressedColor : App.AppTheme.cardColor + radius: App.AppTheme.cardRadius } } diff --git a/evcharger-app/qml/WhiteItemDelegate.qml b/evcharger-app/qml/WhiteItemDelegate.qml index e97fb87..8e23d56 100644 --- a/evcharger-app/qml/WhiteItemDelegate.qml +++ b/evcharger-app/qml/WhiteItemDelegate.qml @@ -1,10 +1,15 @@ import QtQuick import QtQuick.Controls -import QtQuick.Layouts +import EVChargerApp as App ItemDelegate { - Component.onCompleted: { - background.radius = 5 - background.color = "white" + id: control + + font.bold: App.AppTheme.settingsLabelBold + + background: Rectangle { + implicitHeight: 48 + color: control.down ? App.AppTheme.cardPressedColor : App.AppTheme.cardColor + radius: App.AppTheme.cardRadius } } diff --git a/evcharger-app/qml/WhiteSwipeDelegate.qml b/evcharger-app/qml/WhiteSwipeDelegate.qml index a212531..f888952 100644 --- a/evcharger-app/qml/WhiteSwipeDelegate.qml +++ b/evcharger-app/qml/WhiteSwipeDelegate.qml @@ -1,10 +1,12 @@ import QtQuick import QtQuick.Controls -import QtQuick.Layouts +import EVChargerApp as App SwipeDelegate { - Component.onCompleted: { - background.color = "white" - background.radius = 5 + id: control + + background: Rectangle { + color: control.down ? App.AppTheme.cardPressedColor : App.AppTheme.cardColor + radius: App.AppTheme.cardRadius } } diff --git a/evcharger-app/qml/WiFiPage.qml b/evcharger-app/qml/WiFiPage.qml index 93c3fdb..2d402f1 100644 --- a/evcharger-app/qml/WiFiPage.qml +++ b/evcharger-app/qml/WiFiPage.qml @@ -216,62 +216,51 @@ NavigationPage { dialogText: qsTr("Disabling Wi-Fi could make your device unreachable from your local homenetwork or the cloud!") } - WhiteBox { - Layout.fillWidth: true - implicitHeight: connectionStatusColumn.implicitHeight + 20 + SettingsSectionLabel { + text: qsTr("Connection") + } - ColumnLayout { - id: connectionStatusColumn - anchors.fill: parent - anchors.margins: 10 + SettingsCard { + ApiStatusRow { + apiKey: "wst" + label: qsTr("Status") + valueFormatter: function(value) { return stationStatusName(value) } + } - Text { - Layout.fillWidth: true - text: qsTr("Connection") - font.bold: true + ApiStatusRow { + apiKey: "ccw" + label: qsTr("Network") + valueFormatter: function(value) { + if (value === null || value === undefined) + return qsTr("Not connected") + const address = value.ip ? " • " + value.ip : "" + return (value.ssid || qsTr("Unknown network")) + address } + } - ApiStatusRow { - apiKey: "wst" - label: qsTr("Status") - valueFormatter: function(value) { return stationStatusName(value) } + ApiStatusRow { + apiKey: "rssi" + label: qsTr("Signal") + valueFormatter: function(value) { + return value === null || value === undefined + ? "—" + : signalBars(value) + " " + value + " dBm" } + } - ApiStatusRow { - apiKey: "ccw" - label: qsTr("Network") - valueFormatter: function(value) { - if (value === null || value === undefined) - return qsTr("Not connected") - const address = value.ip ? " • " + value.ip : "" - return (value.ssid || qsTr("Unknown network")) + address - } - } + ApiStatusRow { + apiKey: "scas" + label: qsTr("Wi-Fi scan") + valueFormatter: function(value) { return scanStatusName(value) } + } - ApiStatusRow { - apiKey: "rssi" - label: qsTr("Signal") - valueFormatter: function(value) { - return value === null || value === undefined - ? "—" - : signalBars(value) + " " + value + " dBm" - } - } - - ApiStatusRow { - apiKey: "scas" - label: qsTr("Wi-Fi scan") - valueFormatter: function(value) { return scanStatusName(value) } - } - - ApiStatusRow { - apiKey: "scaa" - label: qsTr("Last scan") - valueFormatter: function(value) { - return value === null || value === undefined - ? qsTr("Never") - : formatDuration(value - rebootTime.value) - } + ApiStatusRow { + apiKey: "scaa" + label: qsTr("Last scan") + valueFormatter: function(value) { + return value === null || value === undefined + ? qsTr("Never") + : formatDuration(value - rebootTime.value) } } } @@ -279,10 +268,9 @@ NavigationPage { RowLayout { Layout.fillWidth: true - Text { + SettingsSectionLabel { Layout.fillWidth: true text: qsTr("Configured networks") - font.bold: true } BusyIndicator { @@ -313,15 +301,12 @@ NavigationPage { id: configuredRepeater model: configuredNetworks() - delegate: WhiteBox { + delegate: SettingsCard { required property var modelData - Layout.fillWidth: true - implicitHeight: configuredRow.implicitHeight + 20 RowLayout { id: configuredRow - anchors.fill: parent - anchors.margins: 10 + Layout.fillWidth: true ColumnLayout { Layout.fillWidth: true @@ -359,11 +344,8 @@ NavigationPage { } } - Text { - Layout.fillWidth: true - Layout.topMargin: 10 + SettingsSectionLabel { text: qsTr("Available networks") - font.bold: true } Repeater { @@ -451,11 +433,8 @@ NavigationPage { } } - Text { - Layout.fillWidth: true - Layout.topMargin: 10 + SettingsSectionLabel { text: qsTr("Advanced Wi-Fi settings") - font.bold: true } EditValueItem { @@ -479,77 +458,69 @@ NavigationPage { text: qsTr("Require protected management frames") } - WhiteBox { - Layout.fillWidth: true - implicitHeight: wifiDetailsColumn.implicitHeight + 20 + SettingsSectionLabel { + visible: wifiAddressing.exists || wifiAccessPoint.exists || wifiConnectionProcess.exists + || wifiMac.exists || wifiHostname.exists || wifiErrorCount.exists + text: qsTr("Technical details") + } + + SettingsCard { visible: wifiAddressing.exists || wifiAccessPoint.exists || wifiConnectionProcess.exists || wifiMac.exists || wifiHostname.exists || wifiErrorCount.exists - ColumnLayout { - id: wifiDetailsColumn - anchors.fill: parent - anchors.margins: 10 - - Text { - Layout.fillWidth: true - text: qsTr("Technical details") - font.bold: true + ApiStatusRow { + id: wifiAddressing + apiKey: "ccw" + label: qsTr("Addressing") + valueFormatter: function(value) { + if (value === null || value === undefined) + return "—" + const parts = [] + if (value.ip) parts.push(qsTr("IP %1").arg(value.ip)) + if (value.netmask) parts.push(qsTr("mask %1").arg(value.netmask)) + if (value.gw) parts.push(qsTr("gateway %1").arg(value.gw)) + return parts.length > 0 ? parts.join(" • ") : "—" } + } - ApiStatusRow { - id: wifiAddressing - apiKey: "ccw" - label: qsTr("Addressing") - valueFormatter: function(value) { - if (value === null || value === undefined) - return "—" - const parts = [] - if (value.ip) parts.push(qsTr("IP %1").arg(value.ip)) - if (value.netmask) parts.push(qsTr("mask %1").arg(value.netmask)) - if (value.gw) parts.push(qsTr("gateway %1").arg(value.gw)) - return parts.length > 0 ? parts.join(" • ") : "—" - } + ApiStatusRow { + id: wifiAccessPoint + apiKey: "ccw" + label: qsTr("Access point") + valueFormatter: function(value) { + if (value === null || value === undefined) + return "—" + const channel = value.channel !== undefined ? qsTr("channel %1").arg(value.channel) : "" + return [value.bssid, channel].filter(Boolean).join(" • ") } + } - ApiStatusRow { - id: wifiAccessPoint - apiKey: "ccw" - label: qsTr("Access point") - valueFormatter: function(value) { - if (value === null || value === undefined) - return "—" - const channel = value.channel !== undefined ? qsTr("channel %1").arg(value.channel) : "" - return [value.bssid, channel].filter(Boolean).join(" • ") - } + ApiStatusRow { + id: wifiConnectionProcess + apiKey: "wsms" + label: qsTr("Connection process") + valueFormatter: function(value) { + const names = [qsTr("Idle"), qsTr("Scanning"), qsTr("Connecting"), qsTr("Connected")] + return value >= 0 && value < names.length ? names[value] : qsTr("Unknown") } + } - ApiStatusRow { - id: wifiConnectionProcess - apiKey: "wsms" - label: qsTr("Connection process") - valueFormatter: function(value) { - const names = [qsTr("Idle"), qsTr("Scanning"), qsTr("Connecting"), qsTr("Connected")] - return value >= 0 && value < names.length ? names[value] : qsTr("Unknown") - } - } + ApiStatusRow { + id: wifiMac + apiKey: "macs" + label: qsTr("MAC address") + } - ApiStatusRow { - id: wifiMac - apiKey: "macs" - label: qsTr("MAC address") - } + ApiStatusRow { + id: wifiHostname + apiKey: "hsts" + label: qsTr("Hostname") + } - ApiStatusRow { - id: wifiHostname - apiKey: "hsts" - label: qsTr("Hostname") - } - - ApiStatusRow { - id: wifiErrorCount - apiKey: "wsc" - label: qsTr("Connection errors") - } + ApiStatusRow { + id: wifiErrorCount + apiKey: "wsc" + label: qsTr("Connection errors") } } diff --git a/evcharger-app/qml/flags/de.svg b/evcharger-app/qml/flags/de.svg new file mode 100644 index 0000000..9bb76ca --- /dev/null +++ b/evcharger-app/qml/flags/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/evcharger-app/qml/flags/fi.svg b/evcharger-app/qml/flags/fi.svg new file mode 100644 index 0000000..1822ede --- /dev/null +++ b/evcharger-app/qml/flags/fi.svg @@ -0,0 +1,4 @@ + + + + diff --git a/evcharger-app/qml/flags/gb.svg b/evcharger-app/qml/flags/gb.svg new file mode 100644 index 0000000..0312fc8 --- /dev/null +++ b/evcharger-app/qml/flags/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/evcharger-app/qml/flags/no.svg b/evcharger-app/qml/flags/no.svg new file mode 100644 index 0000000..ee9fea9 --- /dev/null +++ b/evcharger-app/qml/flags/no.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/evcharger-app/qml/flags/se.svg b/evcharger-app/qml/flags/se.svg new file mode 100644 index 0000000..2718013 --- /dev/null +++ b/evcharger-app/qml/flags/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/evcharger-app/qml/flags/system.svg b/evcharger-app/qml/flags/system.svg new file mode 100644 index 0000000..46f7d35 --- /dev/null +++ b/evcharger-app/qml/flags/system.svg @@ -0,0 +1,4 @@ + + + + diff --git a/evcharger-app/qml/flags/tr.svg b/evcharger-app/qml/flags/tr.svg new file mode 100644 index 0000000..ef1f842 --- /dev/null +++ b/evcharger-app/qml/flags/tr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/evcharger-app/qml/material-icons/arrow_back.svg b/evcharger-app/qml/material-icons/arrow_back.svg new file mode 100644 index 0000000..fefde0e --- /dev/null +++ b/evcharger-app/qml/material-icons/arrow_back.svg @@ -0,0 +1 @@ +