Невозможно прочитать значение локализованного ключа из файла ресурсов - PullRequest
0 голосов
/ 14 мая 2019

Я работаю над локализацией .NET Core Web API и выполнил все настройки, но не могу получить локальные значения.

  1. Создано 3 файла ресурсов для языков de-DE, fr-FR и английского языка.
  2. Создан общий Middleware для установки текущей культуры на основе значение строки запроса.
  3. Попытка получить соответствующий локальный ключ, но он всегда дает значение на английском языке.

Может кто-нибудь подсказать и сказать, что я что-то упустил в конфигурации.

Middleware

namespace i18n
{
using System.Globalization;
using System.Threading;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;

/// <summary>
/// The LocalizationMiddleware class.
/// </summary>
public class LocalizationMiddleware
{
    private readonly RequestDelegate _next;

    /// <summary>
    /// Initializes a new instance of the <see cref="LocalizationMiddleware"/> class.
    /// </summary>
    /// <param name="next">The next.</param>
    public LocalizationMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    /// <summary>
    /// Invokes the specified context.
    /// </summary>
    /// <param name="context">The context.</param>
    /// <returns>Task.</returns>
    public async Task Invoke(HttpContext context)
    {
        var localValue = "en-US";
        if (context.Request.Query.ContainsKey("locale"))
        {
            localValue = context.Request.Query["locale"];
        }

        Thread.CurrentThread.CurrentCulture = new CultureInfo(localValue);
        Thread.CurrentThread.CurrentUICulture = new CultureInfo(localValue);

        await _next.Invoke(context);
    }
}

/// <summary>
/// The LocalizationMiddlewareExtensions class.
/// </summary>
public static class LocalizationMiddlewareExtensions
{
    /// <summary>
    /// Uses the localization middleware.
    /// </summary>
    /// <param name="builder">The builder.</param>
    /// <returns>The ApplicationBuilder.</returns>
    public static IApplicationBuilder UseLocalizationMiddleware(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<LocalizationMiddleware>();
    }
} }

Класс запуска

Я зарегистрировал Middleware.

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        app.UseLocalizationMiddleware();
    }

Веб-контроллер API

[HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        var name = Employees.Name; // Always Name is coming english value
        return new string[] { name };
    }

Это моя структура решения:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...