Uaktualniłem projekt z .Net Core 2.2 do .Net Core 3.0.
Po próbie naprawienia wszystkich ostrzeżeń i błędów próbuję teraz sfinansować rozwiązanie tego ostrzeżenia:
'IStringLocalizer.WithCulture(CultureInfo)' is obsolete: 'This method is obsolete.
Use `CurrentCulture` and `CurrentUICulture` instead.'
Używam tego, aby zmienić język strony internetowej dla zalogowanego użytkownika. Mam tę implementację, aby zmienić kulturę witryny na użytkownika:
public class CultureLocalizer : ICultureLocalizer
{
private readonly IStringLocalizer localizer;
public CultureLocalizer(IStringLocalizerFactory factory)
{
var type = typeof(Resources.PageResources);
var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName);
localizer = factory.Create("PageResources", assemblyName.Name);
}
// if we have formatted string we can provide arguments
// e.g.: @Localizer.Text("Hello {0}", User.Name)
public LocalizedString Get(string key, params string[] arguments)
{
return arguments == null ? localizer[key] : localizer[key, arguments];
}
public LocalizedString Get(Enum key, params string[] arguments)
{
return arguments == null ? localizer[key.ToString()] : localizer[key.ToString(), arguments];
}
public LocalizedString Get(CultureInfo culture, string key, params string[] arguments)
{
// This is obsolete
return arguments == null ? localizer.WithCulture(culture)[key] : localizer.WithCulture(culture)[key, arguments];
}
public LocalizedString Get(CultureInfo culture, Enum key, params string[] arguments)
{
// This is obsolete
return arguments == null ? localizer.WithCulture(culture)[key.ToString()] : localizer.WithCulture(culture)[key.ToString(), arguments];
}
}
A to jest fikcyjna klasa, która przechowuje tylko .resx
plik do tłumaczenia:
// dummy class for grouping localization resources
public class PageResources
{
}
Nie mogłem znaleźć w sieci niczego, co odnosi się do rozwiązania tego ostrzeżenia, z wyjątkiem dyskusji na github, która wydaje się nie mieć jeszcze rozwiązania.
Czy ktoś inny natknął się na to ostrzeżenie i znalazł rozwiązanie?
źródło
CurrentUICulture
ponieważCurrentCulture
wydaje się, że nie ma na to wpływuStringLocalizer
. Jeśli korzystasz z aplikacji internetowej, możesz użyćservices.Configure<RequestLocalizationOptions>
do dostosowania zachowania w celu wykrycia języka żądań bieżącego użytkownika, ale pamiętaj o domyślnych ustawieniach Microsoft - nagłówkach, plikach cookie i innych - do automatycznego wykrywania języka. Z tego powodu wolę dostosować sięRequestCultureProviders
do mojego znanego mechanizmu wykrywania języka użytkownika.