Я разрабатываю серверное приложение, используя. NET core 3.1. Я переместил CommonResource из моего старого проекта (. NET core 2.1), где все работает нормально. Я хочу получить значение ключа в указанной культуре. Реализация CommonResource:
public class CommonResource : ICommonResource
{
private readonly IStringLocalizer<SharedResource> _localizer;
public CommonResource(
IStringLocalizer<SharedResource> localizer)
{
_localizer = localizer;
}
#region ICommonResource Members
#region General
public string AppName(
string language)
=> GetString(language, nameof(AppName));
#endregion
#endregion
/// <summary>
/// Dispose of class and parent classes
/// </summary>
public void Dispose()
=> GC.SuppressFinalize(this);
private string GetString(
string language,
string name)
{
var currentCulture = CultureInfo.CurrentCulture;
CultureInfo.CurrentCulture = new CultureInfo(language);
var value = _localizer[name];
CultureInfo.CurrentCulture = currentCulture;
// TEST - check all string
//var result = _localizer.GetAllStrings();
return value;
}
}
LocalizationExtensions с AddDefaultLocalization метод:
public static class LocalizationExtensions
{
private const bool AcceptLanguageHeaderRequestCultureProvider = false;
private static readonly CultureInfo CultureInfoEnUs = new CultureInfo("en-US");
private static readonly CultureInfo CultureInfoPlPl = new CultureInfo("pl-PL");
private static readonly CultureInfo DefaultRequestCulture = CultureInfoEnUs;
private static readonly CultureInfo[] SupportedCultures =
{
CultureInfoEnUs,
CultureInfoPlPl
};
public static void AddDefaultLocalization(
this IServiceCollection serviceCollection)
{
serviceCollection.AddLocalization();
serviceCollection.Configure<RequestLocalizationOptions>(
options =>
{
options.DefaultRequestCulture = new RequestCulture(DefaultRequestCulture, DefaultRequestCulture);
options.SupportedCultures = SupportedCultures;
if (!AcceptLanguageHeaderRequestCultureProvider)
{
//https://stackoverflow.com/questions/44480759/asp-net-core-default-language-is-always-english
options.RequestCultureProviders = new List<IRequestCultureProvider>
{
new QueryStringRequestCultureProvider(),
new CookieRequestCultureProvider()
};
}
});
}
}
Мои SharedResources находятся в пути к ресурсам (действие сборки: встроенный ресурс и модификатор доступа: Без генерации кода ).
К сожалению, вызов _localizer.GetAllStrings (); генерирует исключение « Для текущей культуры не существует манифестов ".
Я пробовал много решений, например, переместил SharedResources в путь root или установил дополнительный пакет nuget, но ничего не помогло.
Вы знаете, почему в новой версии. net core существует эта проблема? Спасибо за помощь!