Добавляет локализацию (#4)

Reviewed-on: #4
Co-authored-by: Sergey Nazarov <insight.appdev@gmail.com>
Co-committed-by: Sergey Nazarov <insight.appdev@gmail.com>
This commit is contained in:
Sergey Nazarov 2024-04-15 14:29:54 +00:00 committed by nazarovsa
parent 25e095ed82
commit ba8c94d962
17 changed files with 103 additions and 35 deletions

View File

@ -6,30 +6,33 @@
<MicrosoftVersion>8.0.0</MicrosoftVersion>
<InsightTelegramBotVersion>0.16.0</InsightTelegramBotVersion>
</PropertyGroup>
<ItemGroup>
<PackageVersion Include="Insight.Localizer" Version="1.1.0"/>
</ItemGroup>
<ItemGroup Label="Nocr">
<PackageVersion Include="Nocr.TextMatcher.Api.Contracts" Version="0.4.25" />
<PackageVersion Include="Nocr.TextMatcher.Async.Api.Contracts" Version="0.4.25" />
<PackageVersion Include="Nocr.Users.Api.Contracts" Version="0.4.23" />
<PackageVersion Include="Nocr.TextMatcher.Api.Contracts" Version="0.4.25"/>
<PackageVersion Include="Nocr.TextMatcher.Async.Api.Contracts" Version="0.4.25"/>
<PackageVersion Include="Nocr.Users.Api.Contracts" Version="0.4.23"/>
</ItemGroup>
<ItemGroup Label="Rebus">
<PackageVersion Include="Rebus" Version="8.2.2" />
<PackageVersion Include="Rebus.ServiceProvider" Version="10.1.0" />
<PackageVersion Include="Rebus.RabbitMq" Version="9.0.1" />
<PackageVersion Include="Rebus.Serilog" Version="8.0.0" />
<PackageVersion Include="Rebus" Version="8.2.2"/>
<PackageVersion Include="Rebus.ServiceProvider" Version="10.1.0"/>
<PackageVersion Include="Rebus.RabbitMq" Version="9.0.1"/>
<PackageVersion Include="Rebus.Serilog" Version="8.0.0"/>
</ItemGroup>
<ItemGroup Label="Insight.TelegramBot">
<PackageVersion Include="Insight.TelegramBot" Version="$(InsightTelegramBotVersion)" />
<PackageVersion Include="Insight.TelegramBot.Hosting.DependencyInjection" Version="$(InsightTelegramBotVersion)" />
<PackageVersion Include="Insight.TelegramBot.Handling" Version="$(InsightTelegramBotVersion)" />
<PackageVersion Include="Insight.TelegramBot" Version="$(InsightTelegramBotVersion)"/>
<PackageVersion Include="Insight.TelegramBot.Hosting.DependencyInjection" Version="$(InsightTelegramBotVersion)"/>
<PackageVersion Include="Insight.TelegramBot.Handling" Version="$(InsightTelegramBotVersion)"/>
</ItemGroup>
<ItemGroup Label="Serilog">
<PackageVersion Include="Serilog" Version="3.1.1" />
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.1" />
<PackageVersion Include="Serilog.Settings.Configuration" Version="8.0.0" />
<PackageVersion Include="Serilog" Version="3.1.1"/>
<PackageVersion Include="Serilog.AspNetCore" Version="8.0.1"/>
<PackageVersion Include="Serilog.Settings.Configuration" Version="8.0.0"/>
</ItemGroup>
<ItemGroup Label="Microsoft">
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftVersion)" />
<PackageVersion Include="Microsoft.Extensions.Http" Version="$(MicrosoftVersion)"/>
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="$(MicrosoftVersion)"/>
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="$(MicrosoftVersion)"/>
</ItemGroup>
</Project>

View File

@ -1,3 +1,4 @@
using Insight.Localizer;
using Insight.TelegramBot;
using Insight.TelegramBot.Handling.Handlers;
using Insight.TelegramBot.Models;
@ -9,10 +10,12 @@ namespace Nocr.TelegramClient.AppServices.Handlers.Messages.StartMessage;
public class StartMessageHandler : IMatchingUpdateHandler<StartMessageMatcher>
{
private readonly ILocalizer _localizer;
private readonly IMessageDispatcherQueue _messageQueue;
public StartMessageHandler(IMessageDispatcherQueue messageQueue)
public StartMessageHandler(ILocalizer localizer, IMessageDispatcherQueue messageQueue)
{
_localizer = localizer ?? throw new ArgumentNullException(nameof(localizer));
_messageQueue = messageQueue ?? throw new ArgumentNullException(nameof(messageQueue));
}
@ -21,7 +24,7 @@ public class StartMessageHandler : IMatchingUpdateHandler<StartMessageMatcher>
var telegramId = update.Message.From.Id;
var message = new TextMessage(telegramId)
{
Text = "Привет! Я _bot_name_",
Text = _localizer.Get("messages", "StartMessage"),
ParseMode = ParseMode.Html
};

View File

@ -44,6 +44,7 @@ public class SubscribeMessageHandler : IMatchingUpdateHandler<SubscribeMessageMa
{
_messageQueue.Enqueue(new TextMessage(telegramId)
{
// TODO: Add localizer
Text = "Команда не удовлетворяет формату"
});
return;
@ -54,6 +55,7 @@ public class SubscribeMessageHandler : IMatchingUpdateHandler<SubscribeMessageMa
{
_messageQueue.Enqueue(new TextMessage(telegramId)
{
// TODO: Add localizer
Text = "Не удалось извлечь тип подписки"
});
return;
@ -72,6 +74,7 @@ public class SubscribeMessageHandler : IMatchingUpdateHandler<SubscribeMessageMa
_messageQueue.Enqueue(new TextMessage(telegramId)
{
// TODO: Add localizer
Text = $"Подписка создана: {subscriptionId}"
});
}

View File

@ -36,6 +36,7 @@ public class SubscriptionsMessageHandler : IMatchingUpdateHandler<SubscriptionsM
{
var textMessage = new TextMessage(telegramId)
{
// TODO: Add localizer
Text = subscription.TextView(),
ParseMode = ParseMode.Html
};

View File

@ -4,6 +4,7 @@
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Insight.Localizer" />
<PackageReference Include="Insight.TelegramBot" />
<PackageReference Include="Insight.TelegramBot.Handling" />
<PackageReference Include="Microsoft.Extensions.Http" />

View File

@ -1,3 +1,4 @@
using Insight.Localizer;
using Insight.TelegramBot.Handling.Infrastructure;
using Insight.TelegramBot.Hosting.DependencyInjection.Infrastructure;
using Insight.TelegramBot.Hosting.Polling.ExceptionHandlers;
@ -24,6 +25,19 @@ public class Startup
public void ConfigureServices(IServiceCollection services)
{
var localizerConfiguration = Configuration
.GetSection(nameof(LocalizerConfiguration))
.Get<LocalizerConfiguration>();
Localizer.Initialize(localizerConfiguration);
services.AddSingleton(new Localizer());
// Хак, чтобы постоянно использовать русскую локализацию. В идеале CurrentCulture должен выставляться на основании контекста пользователя в месте инжекта.
services.AddScoped<ILocalizer>(ctx =>
{
Localizer.CurrentCulture = "ru-ru";
return ctx.GetRequiredService<Localizer>();
});
services.AddSingleton<ICurrentDateProvider, DefaultCurrentDateProvider>();
services.AddTelegramBot(bot =>
bot.WithBot<BotClient>(ServiceLifetime.Transient)

View File

@ -22,6 +22,7 @@
<Content Include="..\..\.dockerignore">
<Link>.dockerignore</Link>
</Content>
<Content Include="Resources" />
</ItemGroup>
</Project>

View File

@ -0,0 +1,6 @@
{
"Delete": "Delete 🧹",
"PreviousPage": "<<",
"NextPage": ">>",
"Back": "<< Back"
}

View File

@ -0,0 +1,6 @@
{
"Delete": "Удалить 🧹",
"PreviousPage": "<<",
"NextPage": ">>",
"Back": "<< Назад"
}

View File

@ -0,0 +1,4 @@
{
"InvalidTimeFormat": "Time <b>{ReceivedTime}</b> does not correspond to the acceptable formats!",
"InvalidDateFormat": "Date <b>{ReceivedDate}</b> does not correspond to the acceptable formats!"
}

View File

@ -0,0 +1,4 @@
{
"InvalidTimeFormat": "Время <b>{ReceivedTime}</b> не соответствует допустимым форматам!",
"InvalidDateFormat": "Дата <b>{ReceivedDate}</b> не соответствует допустимым форматам!"
}

View File

@ -0,0 +1,4 @@
{
"en-us": "🇬🇧",
"ru-ru": "🇷🇺"
}

View File

@ -0,0 +1,4 @@
{
"English": "English 🇬🇧",
"Russian": "Русский 🇷🇺"
}

View File

@ -0,0 +1,4 @@
{
"English": "English 🇬🇧",
"Russian": "Русский 🇷🇺"
}

View File

@ -0,0 +1,2 @@
{
}

View File

@ -0,0 +1,3 @@
{
"StartMessage": "Привет! Я, Nocr 🤖!"
}

View File

@ -17,5 +17,10 @@
"MessageDispatcherOptions": {
"Interval": "00:00:00.050",
"ExceptionInterval": "00:00:30"
},
"LocalizerConfiguration": {
"Path": "Resources",
"Pattern": "",
"ReadNestedFolders": "true"
}
}