【发布时间】:2020-10-04 13:18:52
【问题描述】:
我有一个项目,我在其中使用资源文件来存储一些文本,我也在尝试使用 StringLocalizer 从资源文件中获取所需的消息。我已经在 Startup 类中配置了本地化设置,如下所示:
internal static class LocalizationConfiguration
{
private const string ResourcesPath = "Resources";
private const string DefaultCulture = "en-US";
internal static IServiceCollection ConfigureLocalizationSettings(this IServiceCollection services) =>
services
.AddLocalization(options =>
options.ResourcesPath = ResourcesPath);
internal static IApplicationBuilder UseRequestLocalizationMiddleware(this IApplicationBuilder builder) =>
builder
.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(DefaultCulture),
SupportedCultures = new List<CultureInfo>
{
new CultureInfo(DefaultCulture)
}
});
}
我的解决方案由几个项目组成。我需要在包含我的业务逻辑的项目中使用 StringLocalizer - xxx.Handlers。我还创建了一个名为 xxx.Resources 的项目,用于存储包含两个目录的资源:
这是我的 UserMessages 类(它是空的,虚拟类,跟在 https://docs.microsoft.com/pl-pl/aspnet/core/fundamentals/localization?view=aspnetcore-3.1 后面):
public class UserMessages
{
}
我将 StringLocalizer 注入到我的命令处理程序中,然后像下面这样使用它(UserConstants.UserNotFoundMessageKey 没问题):
var userEntity = await _userRepository.GetUserByIdAsync(command.UserId);
if (userEntity is null)
{
var message = _stringLocalizer[UserConstants.UserNotFoundMessageKey];
var statusCode = (int) HttpStatusCode.NotFound;
throw new CommandException(message, statusCode);
}
问题是,我的消息没有以正确的方式本地化,表达式“_stringLocalizer[UserConstants.UserNotFoundMessageKey]”实际上返回的是 UserNotFoundMessageKey 的值,而不是位于资源文件中的消息。我究竟做错了什么??如何正确本地化这些消息?
【问题讨论】:
标签: c# asp.net-core .net-core