From 0c190a072c7ecc72ab1348407bc3985678721238 Mon Sep 17 00:00:00 2001 From: Thorsten Sommer Date: Tue, 14 Apr 2026 13:23:14 +0200 Subject: [PATCH] Fixed I18N implementation --- app/MindWork AI Studio/Chat/ContentText.cs | 2 +- .../Dialogs/EmbeddingProviderDialog.razor.cs | 2 +- .../Dialogs/ProviderDialog.razor.cs | 2 +- .../Dialogs/TranscriptionProviderDialog.razor.cs | 2 +- .../Provider/ModelLoadFailureReasonExtensions.cs | 16 ++++++++++------ 5 files changed, 14 insertions(+), 10 deletions(-) diff --git a/app/MindWork AI Studio/Chat/ContentText.cs b/app/MindWork AI Studio/Chat/ContentText.cs index 1e8ebfb6..eeeeda00 100644 --- a/app/MindWork AI Studio/Chat/ContentText.cs +++ b/app/MindWork AI Studio/Chat/ContentText.cs @@ -180,7 +180,7 @@ public sealed class ContentText : IContent var modelLoadResult = await provider.GetTextModels(token: token); if (!modelLoadResult.Success) { - var userMessage = modelLoadResult.FailureReason.ToUserMessage(TB, provider.InstanceName); + var userMessage = modelLoadResult.FailureReason.ToUserMessage(provider.InstanceName); if (!string.IsNullOrWhiteSpace(userMessage)) await MessageBus.INSTANCE.SendError(new(Icons.Material.Filled.CloudOff, userMessage)); diff --git a/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs index 4ee54907..dec348b2 100644 --- a/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/EmbeddingProviderDialog.razor.cs @@ -287,7 +287,7 @@ public partial class EmbeddingProviderDialog : MSGComponentBase, ISecretId { var result = await provider.GetEmbeddingModels(this.dataAPIKey); if (!result.Success) - this.dataLoadingModelsIssue = result.FailureReason.ToUserMessage(T, provider.InstanceName); + this.dataLoadingModelsIssue = result.FailureReason.ToUserMessage(provider.InstanceName); // Order descending by ID means that the newest models probably come first: var orderedModels = result.Models.OrderByDescending(n => n.Id); diff --git a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs index f9f8eeea..0e395324 100644 --- a/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/ProviderDialog.razor.cs @@ -314,7 +314,7 @@ public partial class ProviderDialog : MSGComponentBase, ISecretId { var result = await provider.GetTextModels(this.dataAPIKey); if (!result.Success) - this.dataLoadingModelsIssue = result.FailureReason.ToUserMessage(T, provider.InstanceName); + this.dataLoadingModelsIssue = result.FailureReason.ToUserMessage(provider.InstanceName); // Order descending by ID means that the newest models probably come first: var orderedModels = result.Models.OrderByDescending(n => n.Id); diff --git a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs index 9dd3dcfb..faa3d3be 100644 --- a/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs +++ b/app/MindWork AI Studio/Dialogs/TranscriptionProviderDialog.razor.cs @@ -302,7 +302,7 @@ public partial class TranscriptionProviderDialog : MSGComponentBase, ISecretId { var result = await provider.GetTranscriptionModels(this.dataAPIKey); if (!result.Success) - this.dataLoadingModelsIssue = result.FailureReason.ToUserMessage(T, provider.InstanceName); + this.dataLoadingModelsIssue = result.FailureReason.ToUserMessage(provider.InstanceName); // Order descending by ID means that the newest models probably come first: var orderedModels = result.Models.OrderByDescending(n => n.Id); diff --git a/app/MindWork AI Studio/Provider/ModelLoadFailureReasonExtensions.cs b/app/MindWork AI Studio/Provider/ModelLoadFailureReasonExtensions.cs index b530423a..eaf7dcb7 100644 --- a/app/MindWork AI Studio/Provider/ModelLoadFailureReasonExtensions.cs +++ b/app/MindWork AI Studio/Provider/ModelLoadFailureReasonExtensions.cs @@ -1,14 +1,18 @@ +using AIStudio.Tools.PluginSystem; + namespace AIStudio.Provider; public static class ModelLoadFailureReasonExtensions { - public static string ToUserMessage(this ModelLoadFailureReason failureReason, Func translate, string providerName) => failureReason switch + private static string TB(string fallbackEN) => I18N.I.T(fallbackEN, typeof(ModelLoadFailureReasonExtensions).Namespace, nameof(ModelLoadFailureReasonExtensions)); + + public static string ToUserMessage(this ModelLoadFailureReason failureReason, string providerName) => failureReason switch { - ModelLoadFailureReason.INVALID_OR_MISSING_API_KEY => string.Format(translate("We could not load models from '{0}'. The API key is probably missing, invalid, or expired."), providerName), - ModelLoadFailureReason.AUTHENTICATION_OR_PERMISSION_ERROR => string.Format(translate("We could not load models from '{0}'. The account or API key does not have the required permissions."), providerName), - ModelLoadFailureReason.PROVIDER_UNAVAILABLE => string.Format(translate("We could not load models from '{0}' because the provider is currently unavailable or could not be reached."), providerName), - ModelLoadFailureReason.INVALID_RESPONSE => string.Format(translate("We could not load models from '{0}' because the provider returned an unexpected response."), providerName), - ModelLoadFailureReason.UNKNOWN => string.Format(translate("We could not load models from '{0}' due to an unknown error."), providerName), + ModelLoadFailureReason.INVALID_OR_MISSING_API_KEY => string.Format(TB("We could not load models from '{0}'. The API key is probably missing, invalid, or expired."), providerName), + ModelLoadFailureReason.AUTHENTICATION_OR_PERMISSION_ERROR => string.Format(TB("We could not load models from '{0}'. The account or API key does not have the required permissions."), providerName), + ModelLoadFailureReason.PROVIDER_UNAVAILABLE => string.Format(TB("We could not load models from '{0}' because the provider is currently unavailable or could not be reached."), providerName), + ModelLoadFailureReason.INVALID_RESPONSE => string.Format(TB("We could not load models from '{0}' because the provider returned an unexpected response."), providerName), + ModelLoadFailureReason.UNKNOWN => string.Format(TB("We could not load models from '{0}' due to an unknown error."), providerName), _ => string.Empty, };