- Init Localizer at app startup (before self-update prompt) and assign to TrExtension.Localizer - Register ILocalizer in DI; inject into WizardViewModel and SettingsViewModel - WizardViewModel: SelectedLanguage ComboBox binding with OnSelectedLanguageChanged -> SetLanguage + InstallContext.Language - WizardWindow.xaml: DockPanel wraps step chips + language ComboBox (right-aligned) - Localize all installer XAML: WizardWindow, WelcomePage, PathsPage, ServicePage, UiSettingsPage, InstallPage, SettingsWindow, SelfUpdatePromptWindow - Localize page Title properties and WizardViewModel.NextButtonText via TrExtension.Localizer - Persist chosen Language in WriteConfigStep and SettingsViewModel.Save into ui.config.json - Append installer section to en.json (nav, welcome, paths, service, uiSettings, install, settings, selfUpdate) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
47 lines
1.6 KiB
C#
47 lines
1.6 KiB
C#
using ClaudeDo.Data;
|
|
using ClaudeDo.Installer.Core;
|
|
|
|
namespace ClaudeDo.Installer.Steps;
|
|
|
|
public sealed class WriteConfigStep : IInstallStep
|
|
{
|
|
public string Name => "Write Configuration";
|
|
|
|
public Task<StepResult> ExecuteAsync(InstallContext ctx, IProgress<string> progress, CancellationToken ct)
|
|
{
|
|
try
|
|
{
|
|
// Expand ~ to the installing user's absolute path so the worker
|
|
// service always finds the correct DB regardless of service account.
|
|
var workerCfg = new InstallerWorkerConfig
|
|
{
|
|
DbPath = Paths.Expand(ctx.DbPath),
|
|
SandboxRoot = Paths.Expand(ctx.SandboxRoot),
|
|
LogRoot = Paths.Expand(ctx.LogRoot),
|
|
WorktreeRootStrategy = ctx.WorktreeRootStrategy,
|
|
CentralWorktreeRoot = Paths.Expand(ctx.CentralWorktreeRoot),
|
|
QueueBackstopIntervalMs = ctx.QueueBackstopIntervalMs,
|
|
SignalRPort = ctx.SignalRPort,
|
|
ClaudeBin = ctx.ClaudeBin,
|
|
};
|
|
workerCfg.Save();
|
|
progress.Report("Written worker.config.json");
|
|
|
|
var uiCfg = new InstallerAppSettings
|
|
{
|
|
DbPath = Paths.Expand(ctx.UiDbPath),
|
|
SignalRUrl = ctx.SignalRUrl,
|
|
Language = ctx.Language,
|
|
};
|
|
uiCfg.Save();
|
|
progress.Report("Written ui.config.json");
|
|
|
|
return Task.FromResult(StepResult.Ok());
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Task.FromResult(StepResult.Fail(ex.Message));
|
|
}
|
|
}
|
|
}
|