Localización .Net Core 6 con recursos en ensamblado

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>

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *