mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Refactor i18n to be self-initializing via DI
- Internationalization.Initialize() called in constructor when DI creates it - Remove InitializeInternationalization() method from App.axaml.cs - Update AvaloniaPublicAPI and LocalizeExtension to use Ioc.Default.GetService - Reorder ConfigureDI before i18n initialization
This commit is contained in:
parent
36e3530a59
commit
5d80816f84
4 changed files with 11 additions and 34 deletions
|
|
@ -23,14 +23,8 @@ public partial class App : Application
|
|||
private static readonly string ClassName = nameof(App);
|
||||
private Settings? _settings;
|
||||
private MainViewModel? _mainVM;
|
||||
private Internationalization? _i18n;
|
||||
|
||||
public static IPublicAPI? API { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets the internationalization service for translations.
|
||||
/// </summary>
|
||||
public static Internationalization? I18n { get; private set; }
|
||||
|
||||
public override void Initialize() => AvaloniaXamlLoader.Load(this);
|
||||
|
||||
|
|
@ -39,7 +33,6 @@ public partial class App : Application
|
|||
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
|
||||
{
|
||||
LoadSettings();
|
||||
InitializeInternationalization();
|
||||
ConfigureDI();
|
||||
|
||||
API = Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
|
@ -77,31 +70,18 @@ public partial class App : Application
|
|||
}
|
||||
}
|
||||
|
||||
private void InitializeInternationalization()
|
||||
{
|
||||
try
|
||||
{
|
||||
_i18n = new Internationalization(_settings!);
|
||||
_i18n.Initialize();
|
||||
I18n = _i18n;
|
||||
Log.Info(ClassName, "Internationalization initialized");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Exception(ClassName, "Failed to initialize internationalization", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void ConfigureDI()
|
||||
{
|
||||
var services = new ServiceCollection();
|
||||
services.AddSingleton(_settings!);
|
||||
services.AddSingleton<IAlphabet, PinyinAlphabet>();
|
||||
services.AddSingleton<StringMatcher>();
|
||||
services.AddSingleton<Internationalization>();
|
||||
services.AddSingleton<MainViewModel>();
|
||||
services.AddSingleton<IPublicAPI>(sp => new AvaloniaPublicAPI(
|
||||
sp.GetRequiredService<Settings>(),
|
||||
() => sp.GetRequiredService<MainViewModel>()));
|
||||
() => sp.GetRequiredService<MainViewModel>(),
|
||||
sp.GetRequiredService<Internationalization>()));
|
||||
Ioc.Default.ConfigureServices(services.BuildServiceProvider());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,11 +25,13 @@ public class AvaloniaPublicAPI : IPublicAPI
|
|||
{
|
||||
private readonly Settings _settings;
|
||||
private readonly Func<MainViewModel> _getMainViewModel;
|
||||
private readonly Internationalization _i18n;
|
||||
|
||||
public AvaloniaPublicAPI(Settings settings, Func<MainViewModel> getMainViewModel)
|
||||
public AvaloniaPublicAPI(Settings settings, Func<MainViewModel> getMainViewModel, Internationalization i18n)
|
||||
{
|
||||
_settings = settings;
|
||||
_getMainViewModel = getMainViewModel;
|
||||
_i18n = i18n;
|
||||
}
|
||||
|
||||
#pragma warning disable CS0067
|
||||
|
|
@ -40,14 +42,7 @@ public class AvaloniaPublicAPI : IPublicAPI
|
|||
// Essential for plugins
|
||||
public void ChangeQuery(string query, bool requery = false) => _getMainViewModel().QueryText = query;
|
||||
|
||||
public string GetTranslation(string key)
|
||||
{
|
||||
var i18n = App.I18n;
|
||||
if (i18n == null)
|
||||
return key;
|
||||
|
||||
return i18n.GetTranslation(key);
|
||||
}
|
||||
public string GetTranslation(string key) => _i18n.GetTranslation(key);
|
||||
|
||||
public List<PluginPair> GetAllPlugins() => PluginManager.AllPlugins;
|
||||
public MatchResult FuzzySearch(string query, string stringToCompare) =>
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@ public class Internationalization
|
|||
public Internationalization(Settings settings)
|
||||
{
|
||||
_settings = settings;
|
||||
Initialize();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Avalonia.Data;
|
||||
using Avalonia.Markup.Xaml;
|
||||
using Avalonia.Markup.Xaml.MarkupExtensions;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using System;
|
||||
|
||||
namespace Flow.Launcher.Avalonia.Resource;
|
||||
|
|
@ -37,7 +38,7 @@ public class LocalizeExtension : MarkupExtension
|
|||
return Fallback ?? "[No Key]";
|
||||
}
|
||||
|
||||
var i18n = App.I18n;
|
||||
var i18n = Ioc.Default.GetService<Internationalization>();
|
||||
if (i18n == null)
|
||||
{
|
||||
return Fallback ?? $"[{Key}]";
|
||||
|
|
@ -64,7 +65,7 @@ public static class Translator
|
|||
/// <returns>The translated string or the key in brackets if not found</returns>
|
||||
public static string GetString(string key)
|
||||
{
|
||||
var i18n = App.I18n;
|
||||
var i18n = Ioc.Default.GetService<Internationalization>();
|
||||
if (i18n == null)
|
||||
{
|
||||
return $"[{key}]";
|
||||
|
|
|
|||
Loading…
Reference in a new issue