64 lines
1.9 KiB
Swift
64 lines
1.9 KiB
Swift
//
|
|
// LanguageManager.swift
|
|
// VDS
|
|
//
|
|
// Created by Matt Bruce on 9/25/24.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
// Language Manager to control the current language setting
|
|
public class LanguageManager {
|
|
|
|
// Enum to define supported languages
|
|
public enum SupportedLanguage: String, CustomStringConvertible {
|
|
case english = "en"
|
|
case spanish = "es"
|
|
|
|
public var description: String { self == .english ? "English" : "Spanish"}
|
|
}
|
|
|
|
// Private static variable to hold the in-memory current language
|
|
private static var _currentLanguage: SupportedLanguage? {
|
|
didSet {
|
|
TextStyle.Provider.updateCurrentStyles()
|
|
}
|
|
}
|
|
|
|
// Static property to manage the current language setting
|
|
public static var currentLanguage: SupportedLanguage {
|
|
get {
|
|
// Check if there is an in-memory language setting
|
|
guard let _currentLanguage else {
|
|
|
|
// set default
|
|
var deviceCurrentLanguage: SupportedLanguage = .english
|
|
|
|
// Check device's preferred language
|
|
let deviceLanguage = Locale.preferredLanguages.first ?? "en"
|
|
if deviceLanguage.starts(with: "es") {
|
|
deviceCurrentLanguage = .spanish
|
|
}
|
|
|
|
_currentLanguage = deviceCurrentLanguage
|
|
return deviceCurrentLanguage
|
|
}
|
|
|
|
return _currentLanguage
|
|
}
|
|
set {
|
|
// Set the in-memory language
|
|
_currentLanguage = newValue
|
|
}
|
|
}
|
|
|
|
// Method to set language using a language code string
|
|
public static func setLanguage(with code: String) {
|
|
if code.starts(with: "es") {
|
|
_currentLanguage = .spanish
|
|
} else {
|
|
_currentLanguage = .english
|
|
}
|
|
}
|
|
}
|