Fix settings reacting to language change

This commit is contained in:
Christoph Hagen 2025-02-05 21:21:41 +01:00
parent d556a51228
commit 41171c31db
8 changed files with 70 additions and 49 deletions

View File

@ -211,11 +211,9 @@ struct MainView: App {
switch content.saveState { switch content.saveState {
case .storageNotInitialized: case .storageNotInitialized:
showInitialSheet() showInitialSheet()
case .isSaved: case .isSaved, .needsSave:
content.saveUnconditionally() content.saveUnconditionally()
case .needsSave: case .failedToSave, .savingPausedDueToLoadErrors:
content.saveUnconditionally()
case .failedToSave:
showStorageErrorSheet = true showStorageErrorSheet = true
} }
} }

View File

@ -2,9 +2,9 @@ import SwiftUI
struct AudioSettingsDetailView: View { struct AudioSettingsDetailView: View {
@Environment(\.language) @Binding
private var language var language: ContentLanguage
@ObservedObject @ObservedObject
var audioPlayer: AudioPlayerSettings var audioPlayer: AudioPlayerSettings

View File

@ -3,8 +3,8 @@ import SFSafeSymbols
struct NavigationBarSettingsView: View { struct NavigationBarSettingsView: View {
@Environment(\.language) @Binding
private var language var language: ContentLanguage
@EnvironmentObject @EnvironmentObject
private var content: Content private var content: Content
@ -30,16 +30,17 @@ struct NavigationBarSettingsView: View {
} }
.buttonStyle(.plain) .buttonStyle(.plain)
} }
FlowHStack {
ForEach(content.settings.navigation.navigationItems) { tag in ForEach(content.settings.navigation.navigationItems) { tag in
TagView(text: tag.title(in: language)) TagView(text: tag.title(in: language))
.foregroundStyle(.white) .foregroundStyle(.white)
}
} }
Text("Select the tags to show in the navigation bar. The number should be even.") Text("Select the tags to show in the navigation bar.")
.foregroundStyle(.secondary) .foregroundStyle(.secondary)
. padding(.bottom) . padding(.bottom)
let localized = content.settings.navigation.localized(in: language)
LocalizedNavigationBarSettingsView(settings: content.settings.navigation.localized(in: language)) LocalizedNavigationBarSettingsView(settings: localized)
} }
.padding() .padding()
} }
@ -48,11 +49,14 @@ struct NavigationBarSettingsView: View {
isPresented: $showItemPicker, isPresented: $showItemPicker,
selectedItems: $content.settings.navigation.navigationItems) selectedItems: $content.settings.navigation.navigationItems)
} }
.onChange(of: language) { oldValue, newValue in
print("Language changed from \(oldValue) to \(newValue)")
}
} }
} }
#Preview { #Preview {
NavigationBarSettingsView() NavigationBarSettingsView(language: .constant(.english))
.environmentObject(Content.mock) .environmentObject(Content.mock)
.padding() .padding()
} }

View File

@ -2,8 +2,8 @@ import SwiftUI
struct PageSettingsDetailView: View { struct PageSettingsDetailView: View {
@Environment(\.language) @Binding
private var language var language: ContentLanguage
@ObservedObject @ObservedObject
var pageSettings: PageSettings var pageSettings: PageSettings
@ -67,6 +67,8 @@ struct PageSettingsDetailView: View {
#Preview { #Preview {
PageSettingsDetailView(pageSettings: .default) PageSettingsDetailView(
language: .constant(.english),
pageSettings: .default)
.padding() .padding()
} }

View File

@ -2,8 +2,8 @@ import SwiftUI
struct PostFeedSettingsView: View { struct PostFeedSettingsView: View {
@Environment(\.language) @Binding
private var language var language: ContentLanguage
@ObservedObject @ObservedObject
var postSettings: PostSettings var postSettings: PostSettings
@ -54,6 +54,8 @@ struct PostFeedSettingsView: View {
#Preview { #Preview {
PostFeedSettingsView(postSettings: .default) PostFeedSettingsView(
.padding() language: .constant(.english),
postSettings: .default)
.padding()
} }

View File

@ -2,7 +2,11 @@ import SwiftUI
struct SettingsContentView: View { struct SettingsContentView: View {
let section: SettingsSection @Binding
var language: ContentLanguage
@Binding
var section: SettingsSection
@EnvironmentObject @EnvironmentObject
private var content: Content private var content: Content
@ -14,19 +18,21 @@ struct SettingsContentView: View {
case .paths: case .paths:
PathSettingsView() PathSettingsView()
case .navigationBar: case .navigationBar:
NavigationBarSettingsView() NavigationBarSettingsView(language: $language)
case .postFeed: case .postFeed:
PostFeedSettingsView(postSettings: content.settings.posts) PostFeedSettingsView(language: $language, postSettings: content.settings.posts)
case .pages: case .pages:
PageSettingsDetailView(pageSettings: content.settings.pages) PageSettingsDetailView(language: $language, pageSettings: content.settings.pages)
case .tagOverview: case .tagOverview:
TagOverviewDetailView() TagOverviewDetailView(language: $language)
case .audioPlayer: case .audioPlayer:
AudioSettingsDetailView(audioPlayer: content.settings.audioPlayer) AudioSettingsDetailView(language: $language, audioPlayer: content.settings.audioPlayer)
} }
} }
} }
#Preview { #Preview {
SettingsContentView(section: .paths) SettingsContentView(
language: .constant(.english),
section: .constant(.paths))
} }

View File

@ -41,30 +41,39 @@ struct SettingsSheet: View {
var body: some View { var body: some View {
VStack(spacing: 0) { VStack(spacing: 0) {
HStack(alignment: .top) { VStack(alignment: .leading) {
DetailTitle( HStack(alignment: .top) {
title: title, Text(title)
text: text) .font(.largeTitle)
Spacer() .bold()
Picker("", selection: $language) { Spacer()
Text("English") HStack(alignment: .center) {
.tag(ContentLanguage.english) Picker("", selection: $language) {
Text("German") Text("English")
.tag(ContentLanguage.german) .tag(ContentLanguage.english)
} Text("German")
.pickerStyle(.segmented) .tag(ContentLanguage.german)
Button(action: { dismiss() }) { }
Text("Close") .pickerStyle(.segmented)
Button(action: { dismiss() }) {
Text("Close")
}
}.frame(width: 200)
} }
Text(text)
.foregroundStyle(.secondary)
.padding(.bottom, 30)
} }
.frame(height: 100)
.padding() .padding()
.background(Color(NSColor.windowBackgroundColor)) .background(Color(NSColor.windowBackgroundColor))
NavigationSplitView { NavigationSplitView {
SettingsListView(section: $section) SettingsListView(section: $section)
.navigationSplitViewColumnWidth(min: sidebarWidth, ideal: sidebarWidth, max: sidebarWidth) .navigationSplitViewColumnWidth(min: sidebarWidth, ideal: sidebarWidth, max: sidebarWidth)
} detail: { } detail: {
SettingsContentView(section: section) SettingsContentView(language: $language, section: $section)
} }
}.frame(width: 550, height: 600) }.frame(width: 600, height: 600)
} }
} }

View File

@ -2,8 +2,8 @@ import SwiftUI
struct TagOverviewDetailView: View { struct TagOverviewDetailView: View {
@Environment(\.language) @Binding
private var language var language: ContentLanguage
@EnvironmentObject @EnvironmentObject
private var content: Content private var content: Content