Add(LanguageApp): début, mais ça compile

pull/20/head
Louis DUFOUR 1 year ago
parent effb257948
commit e68da450b3

Binary file not shown.

@ -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 = "<group>"; };
168CD4FA2C0625A400419510 /* en.lproj */ = {isa = PBXFileReference; lastKnownFileType = folder; path = en.lproj; sourceTree = "<group>"; };
168CD4FE2C06265B00419510 /* LanguageSettings.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LanguageSettings.swift; sourceTree = "<group>"; };
82CE59E82C045D1100ADEE24 /* GameScene.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameScene.swift; sourceTree = "<group>"; };
82CE59EA2C045E3800ADEE24 /* GameView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GameView.swift; sourceTree = "<group>"; };
82CE59EE2C0460E500ADEE24 /* SpriteMoople.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpriteMoople.swift; sourceTree = "<group>"; };
@ -105,6 +111,14 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
168CD4FD2C06264300419510 /* Utils */ = {
isa = PBXGroup;
children = (
168CD4FE2C06265B00419510 /* LanguageSettings.swift */,
);
path = Utils;
sourceTree = "<group>";
};
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 */,

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

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

@ -8,11 +8,11 @@
import SwiftUI
struct PickerComponent<EnumType: RawRepresentable & Identifiable & Hashable>: View where EnumType.RawValue == String {
let title: String
let title: LocalizedStringKey
@Binding var selectedOption: EnumType
let options: [EnumType]
init(title: String, selectedOption: Binding<EnumType>, options: [EnumType]) {
init(title: LocalizedStringKey, selectedOption: Binding<EnumType>, 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
)
)
}
}

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

@ -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"
}
}
}

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

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

@ -0,0 +1,11 @@
/*
Localizable.strings
ArkitDoushiQi
Created by Louis DUFOUR on 28/05/2024.
*/
"ParametersTitle" = "Parameters";
"DarkModeDescription" = "Dark Mode";
"LanguagePickerTitle" = "Language";

@ -0,0 +1,11 @@
/*
Localizable.strings
ArkitDoushiQi
Created by Louis DUFOUR on 28/05/2024.
*/
"ParametersTitle" = "Paramètres";
"DarkModeDescription" = "Mode sombre";
"LanguagePickerTitle" = "Langue";
Loading…
Cancel
Save