diff --git a/app/MindWork AI Studio/Settings/SettingsManager.cs b/app/MindWork AI Studio/Settings/SettingsManager.cs index 6caa490f..4221a557 100644 --- a/app/MindWork AI Studio/Settings/SettingsManager.cs +++ b/app/MindWork AI Studio/Settings/SettingsManager.cs @@ -5,6 +5,7 @@ using System.Text.Json.Serialization; using AIStudio.Provider; using AIStudio.Settings.DataModel; using AIStudio.Tools.PluginSystem; +using AIStudio.Tools.Services; // ReSharper disable NotAccessedPositionalProperty.Local @@ -13,7 +14,7 @@ namespace AIStudio.Settings; /// /// The settings manager. /// -public sealed class SettingsManager(ILogger logger) +public sealed class SettingsManager(ILogger logger, RustService rustService) { private const string SETTINGS_FILENAME = "settings.json"; @@ -24,6 +25,7 @@ public sealed class SettingsManager(ILogger logger) }; private readonly ILogger logger = logger; + private readonly RustService rustService = rustService; /// /// The directory where the configuration files are stored. @@ -150,6 +152,46 @@ public sealed class SettingsManager(ILogger logger) /// True, when the plugin is enabled, false otherwise. public bool IsPluginEnabled(IPluginMetadata plugin) => this.ConfigurationData.EnabledPlugins.Contains(plugin.Id); + /// + /// Returns the active language plugin. + /// + /// The active language plugin. + public async Task GetActiveLanguagePlugin() + { + switch (this.ConfigurationData.App.LanguageBehavior) + { + case LangBehavior.AUTO: + var languageCode = await this.rustService.ReadUserLanguage(); + var languagePlugin = PluginFactory.RunningPlugins.FirstOrDefault(x => x is ILanguagePlugin langPlug && langPlug.IETFTag == languageCode); + if (languagePlugin is null) + return PluginFactory.BaseLanguage; + + if (languagePlugin is ILanguagePlugin langPlugin) + return langPlugin; + + this.logger.LogError("The language plugin is not a language plugin."); + return PluginFactory.BaseLanguage; + + case LangBehavior.MANUAL: + var pluginId = this.ConfigurationData.App.LanguagePluginId; + var plugin = PluginFactory.RunningPlugins.FirstOrDefault(x => x.Id == pluginId); + if (plugin is null) + { + this.logger.LogWarning($"The chosen language plugin (id='{pluginId}') is not available."); + return PluginFactory.BaseLanguage; + } + + if (plugin is ILanguagePlugin chosenLangPlugin) + return chosenLangPlugin; + + this.logger.LogError("The chosen language plugin is not a language plugin."); + return PluginFactory.BaseLanguage; + } + + this.logger.LogError("The language behavior is unknown."); + return PluginFactory.BaseLanguage; + } + [SuppressMessage("Usage", "MWAIS0001:Direct access to `Providers` is not allowed")] public Provider GetPreselectedProvider(Tools.Components component, string? currentProviderId = null, bool usePreselectionBeforeCurrentProvider = false) {