#.net #masstransit
#.net #masstransit
Вопрос:
Я разрабатываю API dotnet и уже реализовал все функции локализации, но при обработке сообщения из очереди CurrentCulture / CurrentUICulture устанавливаются неправильно, поэтому ресурсы IStringLocalizer извлекаются из нежелательной культуры.
Я использую masstransit с AmazonSQS.
В проекте web api моя конфигурация локализации выглядит следующим образом:
public static IServiceCollection ConfigureLocalization(this IServiceCollection serviceCollection)
{
return serviceCollection.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[] { new CultureInfo("pt-BR"), };
options.DefaultRequestCulture = new RequestCulture("pt-BR");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
})
.AddLocalization();
}
В другом проекте мои пользователи Masstransit любят:
public class UserConsumers : IConsumer<IRunTestMessage>
{
private readonly ILogger<UserConsumers> _logger;
private readonly IUserHandlers _userHandlers;
public UserConsumers(ILogger<UserConsumers> logger, IUserHandlers userHandlers)
{
_logger = logger;
_userHandlers = userHandlers;
}
public async Task Consume(ConsumeContext<IRunTestMessage> context)
{
await _userHandlers.RunTestAsync(context.Message.UserId);
}
}
При получении любого сообщения CurrentCulture / CurrentUICulture всегда является «en-US».
Как я могу установить текущую культуру для каждого полученного сообщения?
Ответ №1:
Чтобы передать язык, вам нужно будет записать язык для идентификатора пользователя и сохранить его либо в заголовке сообщения, либо в сообщении (возможно, первом), а затем использовать это значение для выбора языка, который будет использоваться при использовании сообщения.
Нет встроенного средства, которое автоматически передаст язык от отправителя сообщения потребителю.
Комментарии:
1. В дополнение к этому я в конечном итоге реализую an
DefaultCulturePipeSpecification<T> : IPipeSpecification<T>
, который считывает заголовок culture info и устанавливает CultureInfo.CurrentUICulture . Спасибо