using System; using System.Windows; namespace HC_APTBS.Services.Impl { /// /// Manages runtime language switching by swapping a merged /// in . /// /// /// On construction the service reads /// and loads the corresponding dictionary. Subsequent calls to /// replace it in-place and persist the preference. /// public sealed class LocalizationService : ILocalizationService { private const string EspUri = "pack://application:,,,/Resources/Strings.es.xaml"; private const string EngUri = "pack://application:,,,/Resources/Strings.en.xaml"; private readonly IConfigurationService _config; private ResourceDictionary? _currentDictionary; /// public string CurrentLanguage { get; private set; } = "ESP"; /// public event Action? LanguageChanged; /// /// Initialises the localization service and loads the language /// stored in . /// public LocalizationService(IConfigurationService config) { _config = config; // Load persisted language without saving (already persisted). LoadDictionary(_config.Settings.Language); } /// public void SetLanguage(string languageCode) { var code = NormaliseCode(languageCode); if (code == CurrentLanguage) return; LoadDictionary(code); // Persist the choice. _config.Settings.Language = code; _config.SaveSettings(); LanguageChanged?.Invoke(); } /// public string GetString(string key) { return Application.Current.Resources[key]?.ToString() ?? key; } // ── Helpers ────────────────────────────────────────────────────────────── private void LoadDictionary(string languageCode) { var code = NormaliseCode(languageCode); var uri = code == "ENG" ? EngUri : EspUri; var dict = new ResourceDictionary { Source = new Uri(uri, UriKind.Absolute) }; var merged = Application.Current.Resources.MergedDictionaries; if (_currentDictionary != null) merged.Remove(_currentDictionary); merged.Add(dict); _currentDictionary = dict; CurrentLanguage = code; } private static string NormaliseCode(string code) => string.Equals(code, "ENG", StringComparison.OrdinalIgnoreCase) ? "ENG" : "ESP"; } }