.net - 在公共交通中,如何将当前文化设置为正在执行的消息?
问题描述
我正在开发一个 dotnet api,并且已经实现了所有本地化功能,但是在处理来自队列的消息时,没有正确设置 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”。
如何设置收到的每条消息的 CurrentUiCulture?
解决方案
要传递文化,您需要捕获 UserId 的文化并将其存储在消息头或消息(可能是第一个)中,然后使用该值选择在使用消息时要使用的文化。
没有内置工具可以自动将文化从消息发起者转移到消费者。
推荐阅读
- mongodb - 在比较那些重复项中的某些字段时在 MongoDB 中查找重复项
- .net-core - 如何使用 IHttpClientFactory 在 Blazor Server 中配置 HttpClient 基地址
- java - 网页辅助功能:输入需要用键盘检查 Enter 键按下
- excel - 动态嵌套excel公式
- java - RabbitMQ 异常:操作 queue.declare 导致服务器端出现通道异常 not_found
- c++ - 通过插入节点创建一个新的链表
- python - 通过python发送查询但rowcount仍然为0
- azure - 禁止委派管理员用户删除资源
- mariadb - openstack中nova的数据库同步期间出错
- javascript - 将带有循环的 Songtext 中的所有元音更改为“a”