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;
+ }
}