У меня возникли некоторые проблемы с настройкой локализации текста в ASP. NET Core 3. Вернее, раньше он работал, а после неудачи (без сохранения изменений и случайного удаления некоторых из них) он больше не работал. делает. Я уверен, что мне чего-то не хватает по основам c, но я могу решить это на всю жизнь.
У меня есть следующие блоки кода на месте:
Запуск .cs:
private static readonly List<CultureInfo> SupportedCultures = new List<CultureInfo>
{
new CultureInfo("en"),
new CultureInfo("fr")
};
// ...
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; })
.AddDataAnnotationsLocalization(options =>
{
options.DataAnnotationLocalizerProvider = (type, factory) =>
factory.Create(typeof(Language));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizeAreaFolder("Identity", "/Account/Manage");
options.Conventions.AuthorizeAreaPage("Identity", "/Account/Logout");
});
services.AddLocalization(o =>
{
o.ResourcesPath = "Resources";
});
services.Configure<RequestLocalizationOptions>(options =>
{
options.DefaultRequestCulture = new RequestCulture("en", "en");
options.SupportedCultures = SupportedCultures;
options.SupportedUICultures = SupportedCultures;
});
// ...
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("en"),
SupportedCultures = SupportedCultures,
SupportedUICultures = SupportedCultures,
RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
}
});
Resources \ Language.cs:
public sealed class Language
{
public sealed class Login
{
public const string PageTitle = nameof(Login) + nameof(PageTitle);
public const string SubmitButton = nameof(Login) + nameof(SubmitButton);
public const string Username = nameof(Login) + nameof(Username);
// ...
}
}
View:
@inject IHtmlLocalizer<Language> Localizer
...
@Localizer[Language.Login.SubmitButton]
У меня также есть следующие файлы resx, содержащие ключи и текст .
Resources \ Language.resx (также пробовал с именем Language.en.resx безрезультатно)
Resources \ Language.fr.resx
Весь текст просто отображается в качестве ключей, независимо от того, происходит ли это из MVC View, страницы Razor, произвольного класса, получающего локализатор из DI, или атрибутов.
Есть какие-нибудь подсказки относительно того, что я делаю неправильно? Спасибо