.net core 6(Web API)。共享本地化不起作用

问题描述 投票:0回答:1

我正在尝试使用具有两个资源文件的共享本地化。

Project structure

我的

SharedResources.cs

namespace Web.Facade
{
    public class SharedResources
    {
    }
}

我的

Startup.cs

        public void ConfigureServices(IServiceCollection services)
        {
           ...
           services.AddLocalization(options => options.ResourcesPath = "Resources");
           ...

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           ...
           var supportedCultures = new[] { "en-US", "ru-RU" };
           var localizationOptions =
               new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
               .AddSupportedCultures(supportedCultures)
               .AddSupportedUICultures(supportedCultures);

           app.UseRequestLocalization(localizationOptions);
           ...
        }

我在控制器和中间件中使用本地化。

比如说我的

AuthController.cs
:

    [Route("api/v1/auth")]
    public class AuthController : ControllerBase
    {
        private readonly IAuthService authService;
        private readonly IStringLocalizer<SharedResources> localizer;

        private readonly ILogger<AuthController> logger;

        public AuthController(
            IAuthService authService,
            IStringLocalizer<SharedResources> localizer,
            ILogger<AuthController> logger)
        {
            this.authService = authService;
            this.localizer = localizer;
            this.logger = logger;
        }
        ...
        ...
        ...
        public async Task<IActionResult> RefreshToken([FromBody] RefreshTokenDTO refreshTokenDto)
        {
            if (!RefreshTokenDTO.IsValidModel(refreshTokenDto, out var errorMessage))
            {
                return this.BadRequest(new ErrorResponse(this.localizer[errorMessage].Value));
            }

我使用

Accept-Language: ru-RU
标头调用我的 Web API 方法,但收到了默认字符串
"Invalid access or refresh tokens"
,而不是来自
"Некорректный access или refresh токен"
 的预期 
SharedResources.ru-RU.resx

我已经在尝试:

  1. SharedResources.cs
    移动到另一个文件夹并移至项目根目录
  2. 更改
    SharedResources.cs
    命名空间
  3. 更改默认文化

只有一件事对我有用:保留一个具有 ru-RU 文化的资源文件并将其重命名为

SharedResources.resx
。但在这种情况下,无论
Accept-Language
标头如何,我总是获得本地化数据。

所以,我想使用共享资源并按标题管理文化。谁能帮助我理解我所缺少的东西?

c# .net localization asp.net-core-webapi
1个回答
0
投票

这是一个解决方法。需要修改一个文件。

程序.cs

using Microsoft.AspNetCore.Localization;
using Microsoft.Extensions.Options;
using System.Globalization;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddLocalization();
builder.Services.Configure<RequestLocalizationOptions>(
    options =>
    {
        var supportedCultures = new List<CultureInfo>
        {
            new CultureInfo("en-US"),
            new CultureInfo("ru-RU")
        };

        options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
        options.SupportedCultures = supportedCultures;
        options.SupportedUICultures = supportedCultures;
    });

builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

var localizeOptions = app.Services.GetService<IOptions<RequestLocalizationOptions>>();
app.UseRequestLocalization(localizeOptions.Value);

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();

© www.soinside.com 2019 - 2024. All rights reserved.