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)
{