feat(i18n): initialize Localizer at app startup from config/OS culture

This commit is contained in:
mika kuns
2026-06-03 11:46:33 +02:00
parent 6a85d82fcf
commit f529a5ff22

View File

@@ -1,8 +1,10 @@
using Avalonia; using Avalonia;
using ClaudeDo.Data; using ClaudeDo.Data;
using ClaudeDo.Data.Git; using ClaudeDo.Data.Git;
using ClaudeDo.Localization;
using ClaudeDo.Releases; using ClaudeDo.Releases;
using ClaudeDo.Ui; using ClaudeDo.Ui;
using ClaudeDo.Ui.Localization;
using ClaudeDo.Ui.Services; using ClaudeDo.Ui.Services;
using ClaudeDo.Ui.Services.Interfaces; using ClaudeDo.Ui.Services.Interfaces;
using ClaudeDo.Ui.ViewModels; using ClaudeDo.Ui.ViewModels;
@@ -12,6 +14,9 @@ using ClaudeDo.Ui.ViewModels.Modals.Settings;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using System; using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.Http; using System.Net.Http;
using System.Reflection; using System.Reflection;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
@@ -71,6 +76,17 @@ sealed class Program
// Infrastructure // Infrastructure
sc.AddSingleton(settings); sc.AddSingleton(settings);
var localesDir = Path.Combine(AppContext.BaseDirectory, "locales");
var localeStore = LocaleStore.Load(localesDir);
var initialLang = !string.IsNullOrWhiteSpace(settings.Language)
? settings.Language
: CultureResolver.Resolve(
CultureInfo.CurrentUICulture.Name,
localeStore.Available.Select(l => l.Code).ToArray(),
fallback: "en");
var localizer = new Localizer(localeStore, initialLang);
TrExtension.Localizer = localizer;
sc.AddSingleton<ILocalizer>(localizer);
sc.AddDbContextFactory<ClaudeDoDbContext>(opt => sc.AddDbContextFactory<ClaudeDoDbContext>(opt =>
opt.UseSqlite($"Data Source={dbPath}")); opt.UseSqlite($"Data Source={dbPath}"));
sc.AddScoped<ClaudeDoDbContext>(sp => sc.AddScoped<ClaudeDoDbContext>(sp =>