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
  • Язык.resx

_localizer["MyAccount"]; Вернет строку "MyAccount", как будто ничего не нашел в локализации.

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

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


person Axel Andersen    schedule 19.03.2017    source источник
comment
Вы добавили app.UseRequestLocalization(new RequestLocalizationOptions(...)) в начало Startup.Configure? Мне кажется, это то, чего вам не хватает, поскольку с этим добавлением вам действительно не нужно services.Configure<RequestLocalizationOptions>(...).   -  person Daniel J.G.    schedule 19.03.2017
comment
Спасибо за ваше предложение, я попробовал, и это помогло решить проблему с культурой. Теперь: - строка test = Language.MyAccount; вернет датский текст: Min konto Но я все еще не могу получить - _localizer[MyAccount]; чтобы вернуть значение, отличное от MyAccount, которое является просто ключом, а не значением. Я считаю, что проблема связана с неправильной загрузкой моего файла ресурсов. Есть предложения по этому поводу?   -  person Axel Andersen    schedule 20.03.2017


Ответы (2)


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

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

в разделе «Настройка» моего файла Startup.cs.

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

вместо

namespace AO.Customer.Resources

должен быть

namespace AO.Customer

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

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

person Axel Andersen    schedule 20.03.2017

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

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

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

person Popa Andrei    schedule 07.09.2017