Add language behavior to the app settings

This commit is contained in:
Thorsten Sommer 2025-04-12 11:13:56 +02:00
parent 7f6190a883
commit 900b65edf5
Signed by: tsommer
GPG Key ID: 371BBA77A02C0108
5 changed files with 56 additions and 0 deletions

View File

@ -3,6 +3,17 @@
@inherits SettingsPanelBase @inherits SettingsPanelBase
<ExpansionPanel HeaderIcon="@Icons.Material.Filled.Apps" HeaderText="App Options"> <ExpansionPanel HeaderIcon="@Icons.Material.Filled.Apps" HeaderText="App Options">
@if (PreviewFeatures.PRE_PLUGINS_2025.IsEnabled(this.SettingsManager))
{
<ConfigurationSelect OptionDescription="Language behavior" SelectedValue="@(() => this.SettingsManager.ConfigurationData.App.LanguageBehavior)" Data="@ConfigurationSelectDataFactory.GetLangBehaviorData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.App.LanguageBehavior = selectedValue)" OptionHelp="Select the language behavior for the app. The default is to use the system language. You might want to choose a language manually?"/>
@if (this.SettingsManager.ConfigurationData.App.LanguageBehavior is LangBehavior.MANUAL)
{
<ConfigurationSelect OptionDescription="Language" SelectedValue="@(() => this.SettingsManager.ConfigurationData.App.LanguagePluginId)" Data="@ConfigurationSelectDataFactory.GetLanguagesData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.App.LanguagePluginId = selectedValue)" OptionHelp="Select the language for the app."/>
}
}
<ConfigurationSelect OptionDescription="Color theme" SelectedValue="@(() => this.SettingsManager.ConfigurationData.App.PreferredTheme)" Data="@ConfigurationSelectDataFactory.GetThemesData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.App.PreferredTheme = selectedValue)" OptionHelp="Choose the color theme that best suits for you."/> <ConfigurationSelect OptionDescription="Color theme" SelectedValue="@(() => this.SettingsManager.ConfigurationData.App.PreferredTheme)" Data="@ConfigurationSelectDataFactory.GetThemesData()" SelectionUpdate="@(selectedValue => this.SettingsManager.ConfigurationData.App.PreferredTheme = selectedValue)" OptionHelp="Choose the color theme that best suits for you."/>
<ConfigurationOption OptionDescription="Save energy?" LabelOn="Energy saving is enabled" LabelOff="Energy saving is disabled" State="@(() => this.SettingsManager.ConfigurationData.App.IsSavingEnergy)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.App.IsSavingEnergy = updatedState)" OptionHelp="When enabled, streamed content from the AI is updated once every third second. When disabled, streamed content will be updated as soon as it is available."/> <ConfigurationOption OptionDescription="Save energy?" LabelOn="Energy saving is enabled" LabelOff="Energy saving is disabled" State="@(() => this.SettingsManager.ConfigurationData.App.IsSavingEnergy)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.App.IsSavingEnergy = updatedState)" OptionHelp="When enabled, streamed content from the AI is updated once every third second. When disabled, streamed content will be updated as soon as it is available."/>
<ConfigurationOption OptionDescription="Enable spellchecking?" LabelOn="Spellchecking is enabled" LabelOff="Spellchecking is disabled" State="@(() => this.SettingsManager.ConfigurationData.App.EnableSpellchecking)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.App.EnableSpellchecking = updatedState)" OptionHelp="When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections." /> <ConfigurationOption OptionDescription="Enable spellchecking?" LabelOn="Spellchecking is enabled" LabelOff="Spellchecking is disabled" State="@(() => this.SettingsManager.ConfigurationData.App.EnableSpellchecking)" StateUpdate="@(updatedState => this.SettingsManager.ConfigurationData.App.EnableSpellchecking = updatedState)" OptionHelp="When enabled, spellchecking will be active in all input fields. Depending on your operating system, errors may not be visually highlighted, but right-clicking may still offer possible corrections." />

View File

@ -6,6 +6,7 @@ using AIStudio.Assistants.TextSummarizer;
using AIStudio.Assistants.EMail; using AIStudio.Assistants.EMail;
using AIStudio.Provider; using AIStudio.Provider;
using AIStudio.Settings.DataModel; using AIStudio.Settings.DataModel;
using AIStudio.Tools.PluginSystem;
using WritingStylesRewrite = AIStudio.Assistants.RewriteImprove.WritingStyles; using WritingStylesRewrite = AIStudio.Assistants.RewriteImprove.WritingStyles;
using WritingStylesEMail = AIStudio.Assistants.EMail.WritingStyles; using WritingStylesEMail = AIStudio.Assistants.EMail.WritingStyles;
@ -25,6 +26,21 @@ public readonly record struct ConfigurationSelectData<T>(string Name, T Value);
/// </summary> /// </summary>
public static class ConfigurationSelectDataFactory public static class ConfigurationSelectDataFactory
{ {
public static IEnumerable<ConfigurationSelectData<LangBehavior>> GetLangBehaviorData()
{
foreach (var behavior in Enum.GetValues<LangBehavior>())
yield return new(behavior.Name(), behavior);
}
public static IEnumerable<ConfigurationSelectData<Guid>> GetLanguagesData()
{
foreach (var availablePlugin in PluginFactory.RunningPlugins)
{
if(availablePlugin is ILanguagePlugin languagePlugin)
yield return new(languagePlugin.LangName, availablePlugin.Id);
}
}
public static IEnumerable<ConfigurationSelectData<LoadingChatProviderBehavior>> GetLoadingChatProviderBehavior() public static IEnumerable<ConfigurationSelectData<LoadingChatProviderBehavior>> GetLoadingChatProviderBehavior()
{ {
yield return new("When possible, use the LLM provider which was used for each chat in the first place", LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE); yield return new("When possible, use the LLM provider which was used for each chat in the first place", LoadingChatProviderBehavior.USE_CHAT_PROVIDER_IF_AVAILABLE);

View File

@ -2,6 +2,16 @@ namespace AIStudio.Settings.DataModel;
public sealed class DataApp public sealed class DataApp
{ {
/// <summary>
/// The language behavior.
/// </summary>
public LangBehavior LanguageBehavior { get; set; } = LangBehavior.AUTO;
/// <summary>
/// The language plugin ID to use.
/// </summary>
public Guid LanguagePluginId { get; set; } = Guid.Empty;
/// <summary> /// <summary>
/// The preferred theme to use. /// The preferred theme to use.
/// </summary> /// </summary>

View File

@ -0,0 +1,7 @@
namespace AIStudio.Settings.DataModel;
public enum LangBehavior
{
AUTO,
MANUAL,
}

View File

@ -0,0 +1,12 @@
namespace AIStudio.Settings.DataModel;
public static class LangBehaviorExtensions
{
public static string Name(this LangBehavior langBehavior) => langBehavior switch
{
LangBehavior.AUTO => "Choose the language automatically, based on your system language.",
LangBehavior.MANUAL => "Choose the language manually.",
_ => "Unknown option"
};
}