import SwiftUI import FlixyDesign /// Welche Sprachen der Player von sich aus wählen soll. /// /// Die Einstellung gab es schon — der Player liest sie bei jeder Wiedergabe /// aus und wählt die passende Spur. Nur einstellen konnte man sie nirgends: /// sie stand in den Voreinstellungen und blieb dort für immer leer. Eine /// Vorliebe, die niemand äußern kann, ist keine. struct LanguagesView: View { @Environment(PlaybackSettings.self) private var settings @Environment(\.flixyAccent) private var accent /// Die Sprachen, die in Mediatheken tatsächlich vorkommen. /// /// Keine vollständige Liste aller Sprachen der Welt: ein Auswahlrad mit /// zweihundert Einträgen, um „Deutsch" zu finden, ist keine Hilfe. Was /// fehlt, lässt sich später ergänzen — dann mit einem Suchfeld. private static let codes = [ "de", "en", "fr", "es", "it", "nl", "pl", "pt", "ru", "sv", "da", "tr", "ja", "ko", "zh", ] var body: some View { @Bindable var settings = settings Form { Section { Picker("languages.audio", selection: $settings.preferredAudioLanguage) { Text("languages.serverDefault").tag("") ForEach(Self.codes, id: \.self) { code in Text(name(of: code)).tag(code) } } } header: { Text("languages.audioHeader") } footer: { Text("languages.audioExplanation") } Section { Picker("languages.subtitles", selection: $settings.preferredSubtitleLanguage) { Text("languages.subtitlesOff").tag("") ForEach(Self.codes, id: \.self) { code in Text(name(of: code)).tag(code) } } } header: { Text("languages.subtitlesHeader") } footer: { Text("languages.subtitlesExplanation") } } .tint(accent) .scrollContentBackground(.hidden) .background(Color.flixyCanvas) .navigationTitle(Text("languages.title")) .navigationBarTitleDisplayMode(.inline) } /// Der Name der Sprache in der Sprache des Geräts. private func name(of code: String) -> String { Locale.current.localizedString(forLanguageCode: code)?.capitalized ?? code.uppercased() } }