Update(LanguageApp): fonctionnel, mais peut-être mieux

pull/20/head
Louis DUFOUR 11 months ago
parent e68da450b3
commit 43eea3ab07

@ -21,9 +21,12 @@ struct ArkitDoushiQiApp: App {
@StateObject private var languageSettings = LanguageSettings(selectedLanguage: .English) @StateObject private var languageSettings = LanguageSettings(selectedLanguage: .English)
var body: some Scene { var body: some Scene {
WindowGroup { WindowGroup {
MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées",ParametersButtontText: "Paramètres") MainMenu(
playButtonText: "Play",
registeredGamesButtonText: "Registered Games",
parametersButtonText: "Parameters"
)
.environmentObject(languageSettings) .environmentObject(languageSettings)
.preferredColorScheme(isDarkMode ? .dark : .light)
} }
} }
} }

@ -6,18 +6,22 @@
// //
import Foundation import Foundation
import SwiftUI
class LanguageSettings: ObservableObject { class LanguageSettings: ObservableObject {
@Published var selectedLanguage: Language @Published var selectedLanguage: Language {
didSet {
UserDefaults.standard.set([selectedLanguage.localeIdentifier], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
NotificationCenter.default.post(name: NSNotification.Name("LanguageChanged"), object: nil)
}
}
init(selectedLanguage: Language) { init(selectedLanguage: Language) {
self.selectedLanguage = selectedLanguage self.selectedLanguage = selectedLanguage
UserDefaults.standard.set([selectedLanguage.localeIdentifier], forKey: "AppleLanguages")
} }
func changeLanguage(to newLanguage: Language) { func changeLanguage(to newLanguage: Language) {
UserDefaults.standard.set([newLanguage.localeIdentifier], forKey: "AppleLanguages")
UserDefaults.standard.synchronize()
selectedLanguage = newLanguage selectedLanguage = newLanguage
} }
} }

@ -25,6 +25,7 @@ struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: Vi
Picker(title, selection: $selectedOption) { Picker(title, selection: $selectedOption) {
ForEach(options) { option in ForEach(options) { option in
Text(option.rawValue.description) Text(option.rawValue.description)
.tag(option)
.padding() .padding()
} }
} }
@ -49,12 +50,12 @@ struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: Vi
} }
struct PickerComponent_Previews: PreviewProvider { struct PickerComponent_Previews: PreviewProvider {
@State static var selectedItem = AI.RandomAction @State static var selectedItem = Language.English
static var previews: some View { static var previews: some View {
PickerComponent( PickerComponent(
title: "Selectionne une IA :", title: "Select Language:",
selectedOption: $selectedItem, selectedOption: $selectedItem,
options: AI.allCases options: Language.allCases
) )
} }
} }

@ -36,11 +36,11 @@ struct GeneralParametersMenuView: View {
.onChange(of: languageSettings.selectedLanguage) { newLanguage in .onChange(of: languageSettings.selectedLanguage) { newLanguage in
languageSettings.changeLanguage(to: newLanguage) languageSettings.changeLanguage(to: newLanguage)
} }
}.frame(maxHeight: .infinity, alignment: .top) }
.frame(maxHeight: .infinity, alignment: .top)
} }
} }
struct GeneralParametersMenuView_Previews: PreviewProvider { struct GeneralParametersMenuView_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
let languageSettings = LanguageSettings(selectedLanguage: .French) let languageSettings = LanguageSettings(selectedLanguage: .French)

@ -9,45 +9,55 @@ import SwiftUI
struct MainMenu: View { struct MainMenu: View {
@EnvironmentObject var languageSettings: LanguageSettings @EnvironmentObject var languageSettings: LanguageSettings
let playButtonText : String let playButtonText: String
let registeredGamesButtonText : String let registeredGamesButtonText: String
let ParametersButtontText : String let parametersButtonText: String
@State private var action: Int? = 0 @State private var action: Int? = 0
@AppStorage("isDarkMode") private var isDarkMode = false @AppStorage("isDarkMode") private var isDarkMode = false
@State private var reloadView = false // Déclarer reloadView ici
var body: some View { var body: some View {
ZStack { ZStack {
NavigationView { NavigationView {
VStack { VStack {
Spacer() Spacer()
HStack() { HStack {
Text("DouShiQi") Text("DouShiQi")
.bold() .bold()
.font(.title).padding() .font(.title).padding()
} }
Spacer().frame(height: 40) Spacer().frame(height: 40)
VStack(alignment: .leading) { VStack(alignment: .leading) {
ButtonComponent(title: playButtonText) ButtonComponent(title: playButtonText) {
{ GameParametersMenuView() } GameParametersMenuView()
}
Spacer().frame(height: 30) Spacer().frame(height: 30)
ButtonComponent(title: registeredGamesButtonText) ButtonComponent(title: registeredGamesButtonText) {
{ Text("parties enregistrées page") } Text("parties enregistrées page")
}
Spacer().frame(height: 30) Spacer().frame(height: 30)
ButtonComponent(title: ParametersButtontText) ButtonComponent(title: parametersButtonText) {
{ GeneralParametersMenuView( GeneralParametersMenuView(
selectedAIOption: .RandomAction, selectedAIOption: .RandomAction,
selectedRulesOption: .Regular selectedRulesOption: .Regular
)} ).id(reloadView) // Utilisez l'ID pour forcer le rechargement de la vue
}
} }
Spacer() Spacer()
} }
.padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32)) .padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32))
} }
.environmentObject(languageSettings)
.onReceive(NotificationCenter.default.publisher(for: NSNotification.Name("LanguageChanged"))) { _ in
self.reloadView.toggle() // Changez la valeur pour forcer le rechargement
}
} }
} }
} }
struct MainMenu_Previews: PreviewProvider { struct MainMenu_Previews: PreviewProvider {
static var previews: some View { static var previews: some View {
MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées",ParametersButtontText: "Paramètres") MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées", parametersButtonText: "Paramètres")
.environmentObject(LanguageSettings(selectedLanguage: .French))
} }
} }

Loading…
Cancel
Save