Einrichten-Wizard (alle sieben Schritte), Übersicht, LAN-Scanner, Sicherungen laufen jetzt über L10n.t statt fester deutscher String-Literale — Experte- und Verbinden-Tab waren bereits vorher umgestellt (M16/M17). Model-Layer-Strings werden am Verwendungsort gewrappt, ViewModel-generierte Laufzeitstrings (Fehlermeldungen, CLI-Zeilen, Log) bleiben bewusst unübersetzt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
60 lines
2.7 KiB
Swift
60 lines
2.7 KiB
Swift
import SwiftUI
|
|
|
|
struct WifiStepView: View {
|
|
@ObservedObject var viewModel: SetupViewModel
|
|
@AppStorage("appLanguage") private var appLanguage: String = "de"
|
|
|
|
var body: some View {
|
|
Form {
|
|
if viewModel.wifiNetworks.isEmpty && viewModel.unsupportedWifiInterfaces.isEmpty {
|
|
Section {
|
|
Text(L10n.t("An diesem Gerät wurde kein WLAN erkannt. Dieser Schritt wird übersprungen.", appLanguage))
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
}
|
|
|
|
if !viewModel.unsupportedWifiInterfaces.isEmpty {
|
|
Section {
|
|
Text(
|
|
L10n.t("Dein Gerät nutzt den neueren RouterOS-WiFi-Treiber (", appLanguage)
|
|
+ "\(viewModel.unsupportedWifiInterfaces.map(\.name).joined(separator: ", "))"
|
|
+ L10n.t("), den diese App noch nicht unterstützt. WLAN muss dafür vorerst manuell über Winbox eingerichtet werden.", appLanguage)
|
|
)
|
|
.font(.caption)
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
}
|
|
|
|
ForEach($viewModel.wifiNetworks) { $network in
|
|
Section(L10n.t("WLAN auf", appLanguage) + " \(network.interfaceName)") {
|
|
Toggle(L10n.t("Aktivieren", appLanguage), isOn: $network.enabled)
|
|
.help(L10n.t("Schaltet WLAN auf diesem Funkmodul ein und vergibt Netzwerkname und Passwort.", appLanguage))
|
|
if network.enabled {
|
|
TextField(L10n.t("Netzwerkname (SSID)", appLanguage), text: $network.ssid)
|
|
.help(L10n.t("Der Name, den Geräte in ihrer WLAN-Liste sehen und mit dem sie sich verbinden.", appLanguage))
|
|
SecureField(L10n.t("Passwort (mind. 8 Zeichen)", appLanguage), text: $network.password)
|
|
.help(L10n.t("Das WLAN-Passwort (WPA2). Muss mindestens 8 Zeichen lang sein.", appLanguage))
|
|
}
|
|
}
|
|
}
|
|
|
|
Section {
|
|
HStack {
|
|
Button(L10n.t("Zurück", appLanguage)) { viewModel.goBack() }
|
|
Spacer()
|
|
Button(L10n.t("Weiter", appLanguage)) { viewModel.goNext() }
|
|
.disabled(!isStepValid)
|
|
}
|
|
}
|
|
}
|
|
.formStyle(.grouped)
|
|
.navigationTitle(LocalizedStringKey(L10n.t("WLAN (falls vorhanden)", appLanguage)))
|
|
}
|
|
|
|
private var isStepValid: Bool {
|
|
viewModel.wifiNetworks.allSatisfy { network in
|
|
!network.enabled || (!network.ssid.isEmpty && network.password.count >= 8)
|
|
}
|
|
}
|
|
}
|