ASPNET Core и локализация с помощью файлов resx

Я не могу загрузить свои файлы ресурсов, или что-то еще заставляет мое приложение загружать правильные значения.

Это из моего Startup.cs:

services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
services.AddMvc()
        .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, 
         opts => { opts.ResourcesPath = "Resources"; })                    
        .AddDataAnnotationsLocalization();

services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[]
    {
        new CultureInfo("da-DK")
    };

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

И это из моего контроллера:

public class CustomerController : Controller
{
    private readonly IHtmlLocalizer<CustomerController> _localizer;

    public CustomerController(IHtmlLocalizer<CustomerController> localizer)
    {
        _localizer = localizer;
    }

    public IActionResult MyAccount()
    {
        string test = Language.MyAccount;
        ViewData["Message"] = _localizer["MyAccount"];

        return View();
    }

Мои файлы ресурсов расположены в папке с именем Resources в корне моего приложения и называются:

  • Language.da-DK.resx
  • Language.resx

_Localizer["MyAccount"]; Будет возвращать строку "MyAccount", как если бы она не нашла ничего в локализации.

Language.MyAccount; вернет "Мой аккаунт", который является значением по умолчанию. Никто не найдет мой датский перевод этого ключа.

Кто-нибудь может увидеть, что я делаю не так?

2 ответа

Решение

Теперь я понял это, частично помог Дэниэл Дж. Да, мне нужно было

app.UseRequestLocalization(new RequestLocalizationOptions(...))

в части Настройка моего Startup.cs.

Но то, что заставило _localizer фактически найти файл ресурсов, это изменение пространства имен файла resx.designer.

вместо

namespace AO.Customer.Resources

так должно быть

namespace AO.Customer

Ресурсная часть пространства имен была добавлена ​​самой службой.

Спасибо Даниэль

Для использования _localizer["MyAccount"] необходимо, чтобы файлы ресурсов были названы в соответствии с типом, указанным в IHtmlLocalizer< здесь >.

Language.da-DK.resx, Language.resx должны называться CustomerController.da-DK.resx, CustomerController.en.resx

Ознакомьтесь с официальной документацией по локализации ядра.net здесь.

Другие вопросы по тегам