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 здесь.