Files
RouterOS/RouterOSAssistant/Features/Wizard/Steps/Setup/WifiStepView.swift
T
KayandClaude Sonnet 5 3a26f50800 M31: Handbuch in der App (Textanker, DE+EN)
"?"-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>
2026-09-17 17:15:29 +02:00

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)
}
}
}