He actualizado un proyecto de .Net Core 2.2 a .Net Core 3.0.
Después de tratar de corregir todas las advertencias y errores, ahora estoy tratando de encontrar una solución a esta advertencia:
'IStringLocalizer.WithCulture(CultureInfo)' is obsolete: 'This method is obsolete.
Use `CurrentCulture` and `CurrentUICulture` instead.'
Estoy usando esto para cambiar el idioma del sitio web por usuario registrado. Tengo esta implementación para cambiar la cultura del sitio web por usuario:
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];
}
}
Y esta es la clase ficticia que solo contiene el .resx
archivo para las traducciones:
// dummy class for grouping localization resources
public class PageResources
{
}
No pude encontrar nada en la web que se refiera a cómo resolver esta advertencia, excepto esta discusión sobre github que parece no tener solución todavía.
¿Alguien más había tropezado con esta advertencia y encontrado una solución?
fuente
CurrentUICulture
porqueCurrentCulture
parece no tener ningún efectoStringLocalizer
. Si lo usa en una aplicación web, puede usarloservices.Configure<RequestLocalizationOptions>
para ajustar el comportamiento para detectar el idioma de solicitud del usuario actual, pero tenga en cuenta los valores predeterminados de Microsoft (encabezados, cookies, lo que sea) para la detección automática de idioma. Por esta razón, prefiero adaptarmeRequestCultureProviders
a mi propio mecanismo conocido para detectar el idioma del usuario.