"?"-Hilfe-Buttons in allen 6 Haupt-Tabs, allen 6 Wizard-Schritten und allen 45 Experte-Menüs öffnen ein Handbuch-Fenster (WKWebView) und springen per Textanker direkt zur passenden Manual-Stelle. build-manual.py generalisiert auf beliebig viele Sprachen (LANGUAGES- Dict) statt hart DE/EN. Manual.en.md: komplette Handübersetzung aller Fließtext-Kapitel. Kapitel 5 (Experte-Referenz) wird pro Sprache automatisch übersetzt, indem L10n.swifts eigenes App-Übersetzungs- Dictionary wiederverwendet wird (714 Einträge geparst) statt einer zweiten, separat gepflegten Übersetzung. Live bestätigt (DE und EN). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
61 lines
2.8 KiB
Swift
61 lines
2.8 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)
|
|
)
|
|
.appFont(.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)))
|
|
.toolbar { ToolbarItem { ManualHelpButton(anchor: ManualAnchor.stepWifi) } }
|
|
}
|
|
|
|
private var isStepValid: Bool {
|
|
viewModel.wifiNetworks.allSatisfy { network in
|
|
!network.enabled || (!network.ssid.isEmpty && network.password.count >= 8)
|
|
}
|
|
}
|
|
}
|