From b740317a40256afe6eb468346f0900d5067a3c10 Mon Sep 17 00:00:00 2001 From: Sergey Nazarov Date: Fri, 3 May 2024 12:09:18 +0300 Subject: [PATCH] Fix localizer with async local setter of culture --- .../Handlers/SetLocalizerCultureHandler.cs | 14 ++++++++++++++ .../Handlers/UpdateTelegramLoggingHandler.cs | 4 ++-- .../ServiceCollectionExtensions.cs | 2 +- .../Infrastructure/Startup.cs | 13 +++---------- 4 files changed, 20 insertions(+), 13 deletions(-) create mode 100644 src/Nocr.TelegramClient.AppServices/Handlers/SetLocalizerCultureHandler.cs diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/SetLocalizerCultureHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/SetLocalizerCultureHandler.cs new file mode 100644 index 0000000..6a4c554 --- /dev/null +++ b/src/Nocr.TelegramClient.AppServices/Handlers/SetLocalizerCultureHandler.cs @@ -0,0 +1,14 @@ +using Insight.Localizer; +using Insight.TelegramBot.Handling.Handlers; +using Telegram.Bot.Types; + +namespace Nocr.TelegramClient.AppServices.Handlers; + +public sealed class SetLocalizerCultureHandler : IUpdateHandler +{ + public Task Handle(Update update, CancellationToken cancellationToken = default) + { + Localizer.CurrentCulture = "ru-ru"; + return Task.CompletedTask; + } +} \ No newline at end of file diff --git a/src/Nocr.TelegramClient.AppServices/Handlers/UpdateTelegramLoggingHandler.cs b/src/Nocr.TelegramClient.AppServices/Handlers/UpdateTelegramLoggingHandler.cs index d5d3e65..6a56284 100644 --- a/src/Nocr.TelegramClient.AppServices/Handlers/UpdateTelegramLoggingHandler.cs +++ b/src/Nocr.TelegramClient.AppServices/Handlers/UpdateTelegramLoggingHandler.cs @@ -37,7 +37,7 @@ public sealed class UpdateTelegramLoggingHandler : IUpdateHandler _logger.LogWarning("Failed to extract `from` from update:\n{@Update}", update); return Task.CompletedTask; } - + var text = GetText(update); foreach (var updateReceiverId in _options.UpdateReceiverIds) { @@ -49,7 +49,7 @@ public sealed class UpdateTelegramLoggingHandler : IUpdateHandler _messageDispatcherQueue.Enqueue(message); } } - + return Task.CompletedTask; } diff --git a/src/Nocr.TelegramClient.AppServices/ServiceCollectionExtensions.cs b/src/Nocr.TelegramClient.AppServices/ServiceCollectionExtensions.cs index 11c02f1..7cb455c 100644 --- a/src/Nocr.TelegramClient.AppServices/ServiceCollectionExtensions.cs +++ b/src/Nocr.TelegramClient.AppServices/ServiceCollectionExtensions.cs @@ -4,7 +4,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using Nocr.TelegramClient.AppServices.Bots.MessageDispatcher; using Nocr.TelegramClient.AppServices.Handlers; -using Nocr.TelegramClient.AppServices.Handlers.Messages.FeedbackMessage; using Nocr.TelegramClient.AppServices.Options; using Nocr.TelegramClient.AppServices.TextSubscriptions.Handlers; using Nocr.TelegramClient.AppServices.Users; @@ -27,6 +26,7 @@ public static class ServiceCollectionExtensions services.AddHttpClient(); services.Configure(configuration.GetSection(nameof(AdministrationOptions))); + services.AddScoped(); services.AddScoped(); services.Configure(configuration.GetSection(nameof(UsersRestEaseOptions))); diff --git a/src/Nocr.TelegramClient.Host/Infrastructure/Startup.cs b/src/Nocr.TelegramClient.Host/Infrastructure/Startup.cs index 86298b5..db509f5 100644 --- a/src/Nocr.TelegramClient.Host/Infrastructure/Startup.cs +++ b/src/Nocr.TelegramClient.Host/Infrastructure/Startup.cs @@ -29,14 +29,9 @@ public class Startup .GetSection(nameof(LocalizerConfiguration)) .Get(); Localizer.Initialize(localizerConfiguration); - - services.AddSingleton(new Localizer()); - // Хак, чтобы постоянно использовать русскую локализацию. В идеале CurrentCulture должен выставляться на основании контекста пользователя в месте инжекта. - services.AddScoped(ctx => - { - Localizer.CurrentCulture = "ru-ru"; - return ctx.GetRequiredService(); - }); + services.AddSingleton(); + + services.AddAppServices(Configuration); services.AddSingleton(); services.AddTelegramBot(bot => @@ -47,8 +42,6 @@ public class Startup .WithOptions(opt => opt.FromConfiguration(Configuration)) .WithPolling(polling => polling.WithExceptionHandler())); services.AddTelegramBotHandling(typeof(BotClient).Assembly); - - services.AddAppServices(Configuration); services.Configure(Configuration.GetSection(nameof(RebusRabbitMqOptions))); services.AddRebus((builder, ctx) =>