Este post es para intentar explicar como utilizar recursos de localización que se encuentran en un ensamblado distinto.
Funciona para .Net Core 6.
Los ficheros de recurso serán de 2 tipos, uno con el modificador de acceso público y otro sin generación de código.
El principal podrá ser el que tiene el modificador «Public»:
El secundario podrá ser el que tiene el modificador «Sin generación de código»:
Todo lo anterior es en lo referente a nuestro ensamblado de recursos (dll).
En el proyecto principal, además de agregar la referencia a nuestro ensamblado deberemos ir a la parte donde se configura los servicios de .net core, en este caso «Program.cs»
Después del sitio donde se añade el servicio de ControllerWithViews
builder.Services .AddControllersWithViews() .AddRazorRuntimeCompilation();
//Localization
var supportedCultures = new List
{
new CultureInfo("en"),
new CultureInfo("es")
};
builder.Services.AddLocalization();
builder.Services.Configure(
opts =>
{
opts.DefaultRequestCulture = new RequestCulture(supportedCultures[0]);
opts.SupportedCultures = supportedCultures;
opts.SupportedUICultures = supportedCultures;
opts.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
return new ProviderCultureResult(supportedCultures[0].Name);
}));
});
Y después de hacer el build implementar el middleware:
var app = builder.Build();
var options = app.Services.GetService>();
app.UseRequestLocalization(options.Value);
Por último quedaría usarlo, por ejemplo en el controller:
public IActionResult Index()
{
var texto_traducido = Res.HomeAppDescription;
return View();
}
O en la vista:
@inject IStringLocalizer Localizer
<p>Mi traducción es: @Res.HomeAppDescription</p>