From e68da450b38f9adb78240e14324ddd828171fc21 Mon Sep 17 00:00:00 2001 From: louis Date: Tue, 28 May 2024 17:41:57 +0200 Subject: [PATCH 1/2] =?UTF-8?q?Add(LanguageApp):=20d=C3=A9but,=20mais=20?= =?UTF-8?q?=C3=A7a=20compile?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ArkitDoushiQi/.DS_Store | Bin 6148 -> 8196 bytes .../ArkitDoushiQi.xcodeproj/project.pbxproj | 21 +++++++ .../UserInterfaceState.xcuserstate | Bin 18965 -> 44104 bytes .../ArkitDoushiQi/ArkitDoushiQiApp.swift | 3 + .../Utils/LanguageSettings.swift | 23 ++++++++ .../Components/Controls/PickerComponent.swift | 10 +--- .../Components/Controls/ToggleComponent.swift | 20 +++---- .../ArkitDoushiQi/Views/Enum/Language.swift | 17 +++++- .../GeneralParametersMenuView.swift | 54 ++++++++---------- .../Views/MainMenu/MainMenu.swift | 11 +--- ArkitDoushiQi/en.lproj/Localizable.strings | 11 ++++ ArkitDoushiQi/fr.lproj/Localizable.strings | 11 ++++ 12 files changed, 123 insertions(+), 58 deletions(-) create mode 100644 ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift create mode 100644 ArkitDoushiQi/en.lproj/Localizable.strings create mode 100644 ArkitDoushiQi/fr.lproj/Localizable.strings diff --git a/ArkitDoushiQi/.DS_Store b/ArkitDoushiQi/.DS_Store index 5a1a5b92905e2c4e55fffeebdb9205b79206068c..164391c920198f76dcbefc134bc87cffe2ca2543 100644 GIT binary patch delta 319 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMA$h$FMH}hr%jz7$c**Q2SHn1@A zZsuW8W^&|UNM*=l&|}D9C}1dJ$Y;p%%*jtq%E?ax=?0ql6G-d*2Lm7rWHOri$tf(y z6EQ@~f{XHU^7GPxIvBya(txJpw1vSDsAe9DEokaNw#afYpot>eGFgYsa`QeBH|B{A rJc7(X^MF8t8%VfiWv0pXB4!&) u7BMbn=im@z2C4!A0d64S3evE#@H_Klei=`Yb_OPhQ6SS9HplbKVFm!!w-G@A diff --git a/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj b/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj index 20a11ba..1b20515 100644 --- a/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj +++ b/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.pbxproj @@ -7,6 +7,9 @@ objects = { /* Begin PBXBuildFile section */ + 168CD4FB2C0625A400419510 /* fr.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 168CD4F92C0625A400419510 /* fr.lproj */; }; + 168CD4FC2C0625A400419510 /* en.lproj in Resources */ = {isa = PBXBuildFile; fileRef = 168CD4FA2C0625A400419510 /* en.lproj */; }; + 168CD4FF2C06265B00419510 /* LanguageSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 168CD4FE2C06265B00419510 /* LanguageSettings.swift */; }; 82CE59E92C045D1100ADEE24 /* GameScene.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59E82C045D1100ADEE24 /* GameScene.swift */; }; 82CE59EB2C045E3800ADEE24 /* GameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59EA2C045E3800ADEE24 /* GameView.swift */; }; 82CE59EF2C0460E500ADEE24 /* SpriteMoople.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */; }; @@ -51,6 +54,9 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ + 168CD4F92C0625A400419510 /* fr.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = fr.lproj; sourceTree = ""; }; + 168CD4FA2C0625A400419510 /* en.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = en.lproj; sourceTree = ""; }; + 168CD4FE2C06265B00419510 /* LanguageSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSettings.swift; sourceTree = ""; }; 82CE59E82C045D1100ADEE24 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = ""; }; 82CE59EA2C045E3800ADEE24 /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = ""; }; 82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpriteMoople.swift; sourceTree = ""; }; @@ -105,6 +111,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 168CD4FD2C06264300419510 /* Utils */ = { + isa = PBXGroup; + children = ( + 168CD4FE2C06265B00419510 /* LanguageSettings.swift */, + ); + path = Utils; + sourceTree = ""; + }; 8203E9052BF60117005F5C4A /* Frameworks */ = { isa = PBXGroup; children = ( @@ -143,6 +157,8 @@ C205A2AA2BF373360097BD93 = { isa = PBXGroup; children = ( + 168CD4FA2C0625A400419510 /* en.lproj */, + 168CD4F92C0625A400419510 /* fr.lproj */, C205A2B52BF373360097BD93 /* ArkitDoushiQi */, C205A2C62BF373380097BD93 /* ArkitDoushiQiTests */, C205A2D02BF373380097BD93 /* ArkitDoushiQiUITests */, @@ -164,6 +180,7 @@ C205A2B52BF373360097BD93 /* ArkitDoushiQi */ = { isa = PBXGroup; children = ( + 168CD4FD2C06264300419510 /* Utils */, 82CE59E52C045C7500ADEE24 /* Game */, C205A2B62BF373360097BD93 /* ArkitDoushiQiApp.swift */, C205A2B82BF373360097BD93 /* ContentView.swift */, @@ -352,6 +369,7 @@ knownRegions = ( en, Base, + fr, ); mainGroup = C205A2AA2BF373360097BD93; productRefGroup = C205A2B42BF373360097BD93 /* Products */; @@ -370,7 +388,9 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 168CD4FC2C0625A400419510 /* en.lproj in Resources */, C205A2BE2BF373380097BD93 /* Preview Assets.xcassets in Resources */, + 168CD4FB2C0625A400419510 /* fr.lproj in Resources */, C205A2BB2BF373380097BD93 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -406,6 +426,7 @@ C24659E52BF5FE09004E80D5 /* MainMenu.swift in Sources */, 82F9D3362BFE3B3C009EDFAF /* HistoryView.swift in Sources */, C20310D82BFCC2410031657D /* GeneralParametersMenuView.swift in Sources */, + 168CD4FF2C06265B00419510 /* LanguageSettings.swift in Sources */, C2F3940B2C0463940070B4F6 /* ProfileComponent.swift in Sources */, C205A2B72BF373360097BD93 /* ArkitDoushiQiApp.swift in Sources */, C24DAB5C2C061DC700681CD0 /* AI.swift in Sources */, diff --git a/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.xcworkspace/xcuserdata/lodufour1.xcuserdatad/UserInterfaceState.xcuserstate b/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.xcworkspace/xcuserdata/lodufour1.xcuserdatad/UserInterfaceState.xcuserstate index 6f0d56385c3746a5262bc9015a0e1904570b271d..11ae6f1a44401f572338025e98081b6994fea187 100644 GIT binary patch literal 44104 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 delta 9532 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 diff --git a/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift b/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift index cfe6191..3677904 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift @@ -17,9 +17,12 @@ enum Theme { struct ArkitDoushiQiApp: App { @AppStorage("isDarkMode") private var isDarkMode = false + + @StateObject private var languageSettings = LanguageSettings(selectedLanguage: .English) var body: some Scene { WindowGroup { MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées",ParametersButtontText: "Paramètres") + .environmentObject(languageSettings) .preferredColorScheme(isDarkMode ? .dark : .light) } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift b/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift new file mode 100644 index 0000000..2143fd2 --- /dev/null +++ b/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift @@ -0,0 +1,23 @@ +// +// LanguageSettings.swift +// ArkitDoushiQi +// +// Created by Louis DUFOUR on 28/05/2024. +// + +import Foundation +import SwiftUI + +class LanguageSettings: ObservableObject { + @Published var selectedLanguage: Language + + init(selectedLanguage: Language) { + self.selectedLanguage = selectedLanguage + } + + func changeLanguage(to newLanguage: Language) { + UserDefaults.standard.set([newLanguage.localeIdentifier], forKey: "AppleLanguages") + UserDefaults.standard.synchronize() + selectedLanguage = newLanguage + } +} diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift index bd252de..cafef09 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift @@ -8,11 +8,11 @@ import SwiftUI struct PickerComponent: View where EnumType.RawValue == String { - let title: String + let title: LocalizedStringKey @Binding var selectedOption: EnumType let options: [EnumType] - init(title: String, selectedOption: Binding, options: [EnumType]) { + init(title: LocalizedStringKey, selectedOption: Binding, options: [EnumType]) { self.title = title self._selectedOption = selectedOption self.options = options @@ -55,10 +55,6 @@ struct PickerComponent_Previews: PreviewProvider { title: "Selectionne une IA :", selectedOption: $selectedItem, options: AI.allCases - ) + ) } } - - - - diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/ToggleComponent.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/ToggleComponent.swift index 0be4fe5..a77e99f 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/ToggleComponent.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/ToggleComponent.swift @@ -8,29 +8,29 @@ import SwiftUI struct ToggleComponent: View { - let description: String - let booleanName : String - @AppStorage private var boolean : Bool + let description: LocalizedStringKey + let booleanName: String + @AppStorage private var boolean: Bool - init(description: String, booleanName: String, booleanDefaultValue: Bool) { + init(description: LocalizedStringKey, booleanName: String, booleanDefaultValue: Bool) { self.description = description self.booleanName = booleanName _boolean = AppStorage(wrappedValue: booleanDefaultValue, booleanName) } var body: some View { - Divider().background(Color.gray).padding(.vertical, 1) - Toggle(description, isOn: $boolean) - .toggleStyle(SwitchToggleStyle(tint: .blue)) - .padding(EdgeInsets(top: 0, leading: 48, bottom: 0, trailing: 48)) + Divider().background(Color.gray).padding(.vertical, 1) + Toggle(description, isOn: $boolean) + .toggleStyle(SwitchToggleStyle(tint: .blue)) + .padding(EdgeInsets(top: 0, leading: 48, bottom: 0, trailing: 48)) Divider().background(Color.gray).padding(.vertical, 1) } } struct ToggleComponent_Previews: PreviewProvider { static var previews: some View { - VStack{ - ToggleComponent(description: "Dark mode", booleanName: "isDarkMode", booleanDefaultValue: false) + VStack { + ToggleComponent(description: LocalizedStringKey("Dark mode"), booleanName: "isDarkMode", booleanDefaultValue: false) } } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/Enum/Language.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/Enum/Language.swift index 91b1a95..104b667 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/Enum/Language.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/Enum/Language.swift @@ -7,8 +7,19 @@ import Foundation -enum Language: String, CaseIterable, Identifiable, Hashable { - case French = "Français" - case English = "English" +enum Language: String, CaseIterable, Identifiable { + case English = "en" + case French = "fr" + var id: String { self.rawValue } + var localeIdentifier: String { self.rawValue } + + var description: String { + switch self { + case .English: + return "English" + case .French: + return "Français" + } + } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift index c24760a..71d99b0 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift @@ -8,52 +8,46 @@ import SwiftUI struct GeneralParametersMenuView: View { + @EnvironmentObject var languageSettings: LanguageSettings @State private var selectedAIOption: AI - @State private var selectedLanguageOption: Language @State private var selectedRulesOption: Rules - let ParametersTitle : String - let DarkModeDescription : String - let DarModeBooleanName : String - let DarkModeDefaultValue : Bool - let LanguagePickerTitle : String - - init(parametersTitle: String,selectedAIOption: AI, selectedLanguageOption: Language, selectedRulesOption: Rules, DarkModeDescription: String, DarModeBooleanName: String, DarkModeDefaultValue: Bool, LanguagePickerTitle: String) { - self.ParametersTitle = parametersTitle - self.selectedAIOption = selectedAIOption - self.selectedLanguageOption = selectedLanguageOption - self.selectedRulesOption = selectedRulesOption - self.DarkModeDescription = DarkModeDescription - self.DarModeBooleanName = DarModeBooleanName - self.DarkModeDefaultValue = DarkModeDefaultValue - self.LanguagePickerTitle = LanguagePickerTitle + + let parametersTitle = LocalizedStringKey("ParametersTitle") + let darkModeDescription = LocalizedStringKey("DarkModeDescription") + let darkModeBooleanName: String = "isDarkMode" + let darkModeDefaultValue: Bool = false + let languagePickerTitle = LocalizedStringKey("LanguagePickerTitle") + + init(selectedAIOption: AI, selectedRulesOption: Rules) { + self._selectedAIOption = State(initialValue: selectedAIOption) + self._selectedRulesOption = State(initialValue: selectedRulesOption) } - + var body: some View { VStack(alignment: .leading) { HStack(alignment: .center) { - Text(ParametersTitle).bold().font(.title) + Text(parametersTitle).bold().font(.title) }.frame(maxWidth: .infinity) Spacer().frame(maxHeight: 30) - ToggleComponent(description: "Dark mode", booleanName: "isDarkMode", booleanDefaultValue: false) - PickerComponent(title: "Sélectionne un langage :", - selectedOption: $selectedLanguageOption, - options: Language.allCases) - + ToggleComponent(description: darkModeDescription, booleanName: darkModeBooleanName, booleanDefaultValue: darkModeDefaultValue) + PickerComponent(title: languagePickerTitle, + selectedOption: $languageSettings.selectedLanguage, + options: Language.allCases) + .onChange(of: languageSettings.selectedLanguage) { newLanguage in + languageSettings.changeLanguage(to: newLanguage) + } }.frame(maxHeight: .infinity, alignment: .top) } } + struct GeneralParametersMenuView_Previews: PreviewProvider { static var previews: some View { + let languageSettings = LanguageSettings(selectedLanguage: .French) GeneralParametersMenuView( - parametersTitle: "Paramètres", selectedAIOption: .RandomAction, - selectedLanguageOption: .French, - selectedRulesOption: .Regular, - DarkModeDescription: "Dark Mode", - DarModeBooleanName: "isDarkMode", - DarkModeDefaultValue: false, - LanguagePickerTitle: "Séléctionne un langage" + selectedRulesOption: .Regular ) + .environmentObject(languageSettings) } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift index 2d6ff90..c55abbd 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift @@ -8,6 +8,7 @@ import SwiftUI struct MainMenu: View { + @EnvironmentObject var languageSettings: LanguageSettings let playButtonText : String let registeredGamesButtonText : String let ParametersButtontText : String @@ -33,15 +34,9 @@ struct MainMenu: View { Spacer().frame(height: 30) ButtonComponent(title: ParametersButtontText) { GeneralParametersMenuView( - parametersTitle: "Paramètres", selectedAIOption: .RandomAction, - selectedLanguageOption: .French, - selectedRulesOption: .Regular, - DarkModeDescription: "Dark Mode", - DarModeBooleanName: "isDarkMode", - DarkModeDefaultValue: false, - LanguagePickerTitle: "Séléctionne un langage" - ) } + selectedRulesOption: .Regular + )} } Spacer() } diff --git a/ArkitDoushiQi/en.lproj/Localizable.strings b/ArkitDoushiQi/en.lproj/Localizable.strings new file mode 100644 index 0000000..86edfa0 --- /dev/null +++ b/ArkitDoushiQi/en.lproj/Localizable.strings @@ -0,0 +1,11 @@ +/* + Localizable.strings + ArkitDoushiQi + + Created by Louis DUFOUR on 28/05/2024. + +*/ + +"ParametersTitle" = "Parameters"; +"DarkModeDescription" = "Dark Mode"; +"LanguagePickerTitle" = "Language"; diff --git a/ArkitDoushiQi/fr.lproj/Localizable.strings b/ArkitDoushiQi/fr.lproj/Localizable.strings new file mode 100644 index 0000000..e309b3b --- /dev/null +++ b/ArkitDoushiQi/fr.lproj/Localizable.strings @@ -0,0 +1,11 @@ +/* + Localizable.strings + ArkitDoushiQi + + Created by Louis DUFOUR on 28/05/2024. + +*/ + +"ParametersTitle" = "Paramètres"; +"DarkModeDescription" = "Mode sombre"; +"LanguagePickerTitle" = "Langue"; From 43eea3ab07a3b7424c8cd4ecc8e6f3ce9fc68caf Mon Sep 17 00:00:00 2001 From: louis Date: Tue, 28 May 2024 19:05:19 +0200 Subject: [PATCH 2/2] =?UTF-8?q?Update(LanguageApp):=20fonctionnel,=20mais?= =?UTF-8?q?=20peut-=C3=AAtre=20mieux?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 44104 -> 51223 bytes .../ArkitDoushiQi/ArkitDoushiQiApp.swift | 17 +++--- .../Utils/LanguageSettings.swift | 12 ++-- .../Components/Controls/PickerComponent.swift | 9 +-- .../GeneralParametersMenuView.swift | 4 +- .../Views/MainMenu/MainMenu.swift | 56 +++++++++++------- 6 files changed, 58 insertions(+), 40 deletions(-) diff --git a/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.xcworkspace/xcuserdata/lodufour1.xcuserdatad/UserInterfaceState.xcuserstate b/ArkitDoushiQi/ArkitDoushiQi.xcodeproj/project.xcworkspace/xcuserdata/lodufour1.xcuserdatad/UserInterfaceState.xcuserstate index 11ae6f1a44401f572338025e98081b6994fea187..4f15a0d6b3b3ddbdc2544efc2d475855cb1a12c5 100644 GIT binary patch literal 51223 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 delta 22576 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 CN%=AW diff --git a/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift b/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift index 3677904..8790ce7 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/ArkitDoushiQiApp.swift @@ -19,11 +19,14 @@ struct ArkitDoushiQiApp: App { @AppStorage("isDarkMode") private var isDarkMode = false @StateObject private var languageSettings = LanguageSettings(selectedLanguage: .English) - var body: some Scene { - WindowGroup { - MainMenu(playButtonText: "Jouer", registeredGamesButtonText: "Parties enregistrées",ParametersButtontText: "Paramètres") - .environmentObject(languageSettings) - .preferredColorScheme(isDarkMode ? .dark : .light) - } - } + var body: some Scene { + WindowGroup { + MainMenu( + playButtonText: "Play", + registeredGamesButtonText: "Registered Games", + parametersButtonText: "Parameters" + ) + .environmentObject(languageSettings) + } + } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift b/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift index 2143fd2..ed07eaa 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Utils/LanguageSettings.swift @@ -6,18 +6,22 @@ // import Foundation -import SwiftUI 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) { self.selectedLanguage = selectedLanguage + UserDefaults.standard.set([selectedLanguage.localeIdentifier], forKey: "AppleLanguages") } func changeLanguage(to newLanguage: Language) { - UserDefaults.standard.set([newLanguage.localeIdentifier], forKey: "AppleLanguages") - UserDefaults.standard.synchronize() selectedLanguage = newLanguage } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift index cafef09..94d431f 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/Components/Controls/PickerComponent.swift @@ -25,7 +25,8 @@ struct PickerComponent: Vi Picker(title, selection: $selectedOption) { ForEach(options) { option in Text(option.rawValue.description) - .padding() + .tag(option) + .padding() } } .labelsHidden() @@ -49,12 +50,12 @@ struct PickerComponent: Vi } struct PickerComponent_Previews: PreviewProvider { - @State static var selectedItem = AI.RandomAction + @State static var selectedItem = Language.English static var previews: some View { PickerComponent( - title: "Selectionne une IA :", + title: "Select Language:", selectedOption: $selectedItem, - options: AI.allCases + options: Language.allCases ) } } diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift index 71d99b0..1a0862c 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/GeneralParametersMenu/GeneralParametersMenuView.swift @@ -36,11 +36,11 @@ struct GeneralParametersMenuView: View { .onChange(of: languageSettings.selectedLanguage) { newLanguage in languageSettings.changeLanguage(to: newLanguage) } - }.frame(maxHeight: .infinity, alignment: .top) + } + .frame(maxHeight: .infinity, alignment: .top) } } - struct GeneralParametersMenuView_Previews: PreviewProvider { static var previews: some View { let languageSettings = LanguageSettings(selectedLanguage: .French) diff --git a/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift b/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift index c55abbd..2690c53 100644 --- a/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift +++ b/ArkitDoushiQi/ArkitDoushiQi/Views/MainMenu/MainMenu.swift @@ -9,45 +9,55 @@ import SwiftUI struct MainMenu: View { @EnvironmentObject var languageSettings: LanguageSettings - let playButtonText : String - let registeredGamesButtonText : String - let ParametersButtontText : String + let playButtonText: String + let registeredGamesButtonText: String + let parametersButtonText: String @State private var action: Int? = 0 @AppStorage("isDarkMode") private var isDarkMode = false + @State private var reloadView = false // Déclarer reloadView ici + var body: some View { ZStack { NavigationView { - VStack { - Spacer() - HStack() { - Text("DouShiQi") - .bold() - .font(.title).padding() + VStack { + Spacer() + HStack { + Text("DouShiQi") + .bold() + .font(.title).padding() + } + Spacer().frame(height: 40) + VStack(alignment: .leading) { + ButtonComponent(title: playButtonText) { + GameParametersMenuView() } - Spacer().frame(height: 40) - VStack(alignment: .leading) { - ButtonComponent(title: playButtonText) - { GameParametersMenuView() } - Spacer().frame(height: 30) - ButtonComponent(title: registeredGamesButtonText) - { Text("parties enregistrées page") } - Spacer().frame(height: 30) - ButtonComponent(title: ParametersButtontText) - { GeneralParametersMenuView( + Spacer().frame(height: 30) + ButtonComponent(title: registeredGamesButtonText) { + Text("parties enregistrées page") + } + Spacer().frame(height: 30) + ButtonComponent(title: parametersButtonText) { + GeneralParametersMenuView( selectedAIOption: .RandomAction, selectedRulesOption: .Regular - )} + ).id(reloadView) // Utilisez l'ID pour forcer le rechargement de la vue } - Spacer() } - .padding(EdgeInsets(top: 10, leading: 32, bottom: 10, trailing: 32)) + Spacer() } + .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 { 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)) } }