From ca6196234ee4cce9dc783c20aa4e645fe1bcfaa6 Mon Sep 17 00:00:00 2001 From: metacube Date: Thu, 11 Jun 2026 10:08:37 +0200 Subject: [PATCH] Translate settings and purchasing UI text --- .../Pages/PurchasingDashboard.razor | 73 ++++++- .../Pages/PurchasingDataSources.razor | 19 +- .../Components/Pages/Settings.razor | 184 +++++++++--------- 3 files changed, 181 insertions(+), 95 deletions(-) diff --git a/TrafagSalesExporter/Components/Pages/PurchasingDashboard.razor b/TrafagSalesExporter/Components/Pages/PurchasingDashboard.razor index 197c1b5..307eb3b 100644 --- a/TrafagSalesExporter/Components/Pages/PurchasingDashboard.razor +++ b/TrafagSalesExporter/Components/Pages/PurchasingDashboard.razor @@ -37,13 +37,13 @@
- EKKO @(_liveState.EkkoLoaded ? "live" : "pending") + EKKO @(_liveState.EkkoLoaded ? T("live", "live") : T("wartet", "pending")) - EKPO @(_liveState.EkpoLoaded ? "live" : "pending") + EKPO @(_liveState.EkpoLoaded ? T("live", "live") : T("wartet", "pending")) - EKET @(_liveState.EketLoaded ? "live" : "pending") + EKET @(_liveState.EketLoaded ? T("live", "live") : T("wartet", "pending"))
@@ -371,7 +371,7 @@ "Full load builds the correct base. Delta then updates only changed purchase documents.") - @_refreshStatus.Status + @TranslateRefreshStatus(_refreshStatus.Status) @@ -399,7 +399,7 @@ @T("Letzter Stand", "Latest state") @FormatRefreshDate(_refreshStatus.CompletedAtUtc) - @_refreshStatus.Mode + @TranslateRefreshMode(_refreshStatus.Mode) @@ -415,7 +415,7 @@ { } - @_refreshStatus.Message + @TranslatePurchasingMessage(_refreshStatus.Message) } @@ -1534,7 +1534,66 @@ private string PurchasingStatusText => _liveLoading ? T("SAP-Einkaufsdaten werden geladen...", "Loading SAP purchasing data...") - : $"{_liveState.Message} {FormatLatestOrderDate()}"; + : $"{TranslatePurchasingMessage(_liveState.Message)} {FormatLatestOrderDate()}"; + + private string TranslateRefreshStatus(string status) + => status switch + { + "Success" => T("Erfolgreich", "Success"), + "Running" => T("Laeuft", "Running"), + "Error" => T("Fehler", "Error"), + "Empty" => T("Noch leer", "Empty"), + _ => string.IsNullOrWhiteSpace(status) ? "-" : status + }; + + private string TranslateRefreshMode(string mode) + => mode switch + { + "Full" => T("Full Load", "Full load"), + "Delta" => T("Delta", "Delta"), + _ => string.IsNullOrWhiteSpace(mode) ? "-" : mode + }; + + private string TranslatePurchasingMessage(string message) + { + if (string.IsNullOrWhiteSpace(message)) + return string.Empty; + + if (message.Contains("SAP Einkaufsquelle ist noch nicht konfiguriert", StringComparison.OrdinalIgnoreCase)) + return T("SAP Einkaufsquelle ist noch nicht konfiguriert.", "SAP purchasing source is not configured yet."); + if (message.Contains("SAP URL oder Zugangsdaten fehlen", StringComparison.OrdinalIgnoreCase)) + return T("SAP URL oder Zugangsdaten fehlen.", "SAP URL or credentials are missing."); + if (message.Contains("SAP Einkaufsdaten inkl. EKPO/EKET geladen", StringComparison.OrdinalIgnoreCase)) + return T("SAP Einkaufsdaten inkl. EKPO/EKET geladen.", "SAP purchasing data including EKPO/EKET loaded."); + if (message.Contains("SAP Einkaufsdaten inkl. EKPO geladen", StringComparison.OrdinalIgnoreCase)) + return T("SAP Einkaufsdaten inkl. EKPO geladen; EKET liefert noch keine Termindaten.", "SAP purchasing data including EKPO loaded; EKET does not return schedule data yet."); + if (message.Contains("EKKO ist live geladen", StringComparison.OrdinalIgnoreCase)) + return T("EKKO ist live geladen; EKPO/EKET liefern aktuell noch keine Positionsdaten.", "EKKO is loaded live; EKPO/EKET currently do not return item data."); + if (message.Contains("Noch kein Einkauf Full Load ausgefuehrt", StringComparison.OrdinalIgnoreCase)) + return T("Noch kein Einkauf Full Load ausgefuehrt.", "No purchasing full load has been run yet."); + if (message.StartsWith("Full Load gestartet", StringComparison.OrdinalIgnoreCase)) + return T("Full Load gestartet.", "Full load started."); + if (message.StartsWith("Delta gestartet", StringComparison.OrdinalIgnoreCase)) + return T("Delta gestartet.", "Delta started."); + if (message.StartsWith("Full Load abgeschlossen", StringComparison.OrdinalIgnoreCase)) + return message.Replace("Full Load abgeschlossen", T("Full Load abgeschlossen", "Full load completed"), StringComparison.OrdinalIgnoreCase); + if (message.StartsWith("Delta abgeschlossen", StringComparison.OrdinalIgnoreCase)) + return message + .Replace("Delta abgeschlossen", T("Delta abgeschlossen", "Delta completed"), StringComparison.OrdinalIgnoreCase) + .Replace("geaenderte Belege", T("geaenderte Belege", "changed documents"), StringComparison.OrdinalIgnoreCase); + if (message.StartsWith("Einkauf Cache geladen fuer", StringComparison.OrdinalIgnoreCase)) + return message + .Replace("Einkauf Cache geladen fuer", T("Einkauf Cache geladen fuer", "Purchasing cache loaded for"), StringComparison.OrdinalIgnoreCase) + .Replace(" bis ", $" {T("bis", "to")} ", StringComparison.OrdinalIgnoreCase); + if (message.StartsWith("SAP Einkauf konnte nicht geladen werden", StringComparison.OrdinalIgnoreCase)) + return message.Replace("SAP Einkauf konnte nicht geladen werden", T("SAP Einkauf konnte nicht geladen werden", "SAP purchasing could not be loaded"), StringComparison.OrdinalIgnoreCase); + if (message.StartsWith("Full Load fehlgeschlagen", StringComparison.OrdinalIgnoreCase)) + return message.Replace("Full Load fehlgeschlagen", T("Full Load fehlgeschlagen", "Full load failed"), StringComparison.OrdinalIgnoreCase); + if (message.StartsWith("Delta fehlgeschlagen", StringComparison.OrdinalIgnoreCase)) + return message.Replace("Delta fehlgeschlagen", T("Delta fehlgeschlagen", "Delta failed"), StringComparison.OrdinalIgnoreCase); + + return message; + } private string FormatLatestOrderDate() => _liveState.LatestOrderDate.HasValue diff --git a/TrafagSalesExporter/Components/Pages/PurchasingDataSources.razor b/TrafagSalesExporter/Components/Pages/PurchasingDataSources.razor index e47ca9a..1da8f77 100644 --- a/TrafagSalesExporter/Components/Pages/PurchasingDataSources.razor +++ b/TrafagSalesExporter/Components/Pages/PurchasingDataSources.razor @@ -207,7 +207,7 @@ else await RunAsync(async () => { var result = await DataSourceService.TestConnectionAsync(_state); - Snackbar.Add(result.Message, result.Success ? Severity.Success : result.Warning ? Severity.Warning : Severity.Error); + Snackbar.Add(TranslateConnectionMessage(result.Message), result.Success ? Severity.Success : result.Warning ? Severity.Warning : Severity.Error); }); } @@ -246,6 +246,23 @@ else private string T(string german, string english) => UiText.Text(german, english); private static string Display(string? value) => string.IsNullOrWhiteSpace(value) ? "-" : value; + + private string TranslateConnectionMessage(string message) + { + if (string.IsNullOrWhiteSpace(message)) + return string.Empty; + + if (message.Contains("Keine SAP Service URL gepflegt", StringComparison.OrdinalIgnoreCase)) + return T("Keine SAP Service URL gepflegt.", "No SAP service URL maintained."); + if (message.Contains("Keine SAP Gateway Zugangsdaten gepflegt", StringComparison.OrdinalIgnoreCase)) + return T("Keine SAP Gateway Zugangsdaten gepflegt.", "No SAP Gateway credentials maintained."); + if (message.Contains("SAP OData Verbindung erfolgreich", StringComparison.OrdinalIgnoreCase)) + return T("SAP OData Verbindung erfolgreich.", "SAP OData connection successful."); + if (message.StartsWith("SAP OData Verbindung fehlgeschlagen", StringComparison.OrdinalIgnoreCase)) + return message.Replace("SAP OData Verbindung fehlgeschlagen", T("SAP OData Verbindung fehlgeschlagen", "SAP OData connection failed"), StringComparison.OrdinalIgnoreCase); + + return message; + } }