i18n: localize all MessageBox dialogs
The previous batch only covered XAML strings. The runtime MessageBox dialogs (errors, confirmations, info popups) stayed hardcoded in French, breaking immersion for non-FR users. Added ~15 keys to Strings.cs for the MessageBox bodies and titles: - error / launch error / confirm / info / patience / language change / release notes (titles) - launch failed / self-update failed / install failed / uninstall failed / uninstall confirm with version+folder+size / no release notes / fetch failed / clear cache confirm / deactivate license (short and detailed) / language restart (bodies) Some are parametrized (MsgLaunchFailed(detail), MsgUninstallConfirm (version, folder, size)) so the localized strings interpolate the runtime values cleanly across all 5 languages. Replaced every MessageBox.Show in MainViewModel, SettingsViewModel and LicenseDetailsDialog.xaml.cs to use these keys. The "Échec : " prefix in the cache-clear error was dropped — the error message alone is sufficient with Strings.MsgBoxError as the dialog title. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,7 @@ using PSLauncher.Core.Configuration;
|
||||
using PSLauncher.Core.Downloads;
|
||||
using PSLauncher.Core.Installations;
|
||||
using PSLauncher.Core.Licensing;
|
||||
using PSLauncher.Core.Localization;
|
||||
using PSLauncher.Core.Manifests;
|
||||
using PSLauncher.Core.Process;
|
||||
using PSLauncher.Core.Updates;
|
||||
@@ -338,8 +339,8 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Self-update failed");
|
||||
MessageBox.Show($"Mise à jour du launcher échouée :\n\n{ex.Message}",
|
||||
"Erreur", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
MessageBox.Show(Strings.MsgSelfUpdateFailed(ex.Message),
|
||||
Strings.MsgBoxError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
StatusMessage = $"Erreur self-update : {ex.Message}";
|
||||
IsBusy = false;
|
||||
}
|
||||
@@ -463,15 +464,15 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogError(ex, "Launch failed");
|
||||
MessageBox.Show($"Impossible de lancer la version :\n\n{ex.Message}",
|
||||
"Erreur de lancement", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
MessageBox.Show(Strings.MsgLaunchFailed(ex.Message),
|
||||
Strings.MsgBoxLaunchError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task InstallVersionAsync(VersionRowViewModel row)
|
||||
{
|
||||
if (row.Remote is null) return;
|
||||
if (IsBusy) { MessageBox.Show("Une autre opération est déjà en cours.", "Patience", MessageBoxButton.OK, MessageBoxImage.Information); return; }
|
||||
if (IsBusy) { MessageBox.Show(Strings.MsgBusy, Strings.MsgBoxPatience, MessageBoxButton.OK, MessageBoxImage.Information); return; }
|
||||
|
||||
IsBusy = true;
|
||||
_activeRow = row;
|
||||
@@ -555,8 +556,8 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
row.ProgressDetail = null;
|
||||
row.ProgressPercent = 0;
|
||||
MessageBox.Show(
|
||||
$"Le téléchargement ou l'installation a échoué :\n\n{ex.Message}",
|
||||
"Erreur", MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
Strings.MsgInstallFailed(ex.Message),
|
||||
Strings.MsgBoxError, MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
StatusMessage = $"Erreur : {ex.Message}";
|
||||
_toastService.ShowError($"Échec v{row.Version}", ex.Message);
|
||||
}
|
||||
@@ -575,13 +576,13 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
|
||||
var sizeStr = FormatSize(row.SizeBytes);
|
||||
var confirm = MessageBox.Show(
|
||||
$"Supprimer la version v{row.Version} ?\n\nDossier : {row.FolderPath}\nLibérera {sizeStr}.\n\nCette action est irréversible.",
|
||||
"Confirmer la suppression",
|
||||
Strings.MsgUninstallConfirm(row.Version, row.FolderPath, sizeStr),
|
||||
Strings.MsgBoxConfirm,
|
||||
MessageBoxButton.YesNo, MessageBoxImage.Warning, MessageBoxResult.No);
|
||||
|
||||
if (confirm != MessageBoxResult.Yes) return;
|
||||
|
||||
if (IsBusy) { MessageBox.Show("Une autre opération est déjà en cours.", "Patience", MessageBoxButton.OK, MessageBoxImage.Information); return; }
|
||||
if (IsBusy) { MessageBox.Show(Strings.MsgBusy, Strings.MsgBoxPatience, MessageBoxButton.OK, MessageBoxImage.Information); return; }
|
||||
|
||||
IsBusy = true;
|
||||
row.State = VersionRowState.Uninstalling;
|
||||
@@ -596,7 +597,7 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
{
|
||||
_logger.LogError(ex, "Uninstall failed for {Version}", row.Version);
|
||||
row.State = VersionRowState.InstalledIdle;
|
||||
MessageBox.Show($"Suppression échouée : {ex.Message}", "Erreur",
|
||||
MessageBox.Show(Strings.MsgUninstallFailed(ex.Message), Strings.MsgBoxError,
|
||||
MessageBoxButton.OK, MessageBoxImage.Error);
|
||||
StatusMessage = $"Erreur : {ex.Message}";
|
||||
}
|
||||
@@ -611,8 +612,8 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
var url = row.Remote?.ReleaseNotesUrl;
|
||||
if (string.IsNullOrEmpty(url))
|
||||
{
|
||||
MessageBox.Show("Aucune release note disponible pour cette version.",
|
||||
"Release notes", MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
MessageBox.Show(Strings.MsgNoReleaseNotes,
|
||||
Strings.MsgBoxReleaseNotes, MessageBoxButton.OK, MessageBoxImage.Information);
|
||||
return;
|
||||
}
|
||||
string notes;
|
||||
@@ -620,8 +621,8 @@ public sealed partial class MainViewModel : ObservableObject
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning(ex, "Failed to fetch release notes");
|
||||
MessageBox.Show($"Impossible de récupérer les release notes :\n{ex.Message}",
|
||||
"Erreur", MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
MessageBox.Show(Strings.MsgReleaseNotesFetchFailed(ex.Message),
|
||||
Strings.MsgBoxError, MessageBoxButton.OK, MessageBoxImage.Warning);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user