Algumas aplicações de mercado exigem que as mensagens de retorno sejam adpatadas de acordo com a cultura na o request foi feito.
Nesse contexto, o .NET consegue facilmente fazer esse trabalho de maneira fluída utilizando os próprios Resources da plataforma.
Para armazenar as mensagens de retorno de acordo com cada uma da linguagem (cultura) desejada, é necessário definir um resource específico para elas. O detalhe é que o nome do Resource precisa terminar (antes da extensão do arquivo) com o nome da cultura.
Um exemplo: para definir um Resource para a cultura de EN-US, o nome do arquivo ficaria da seguinte maneira: Messages.en-US.resx
.
Neste exemplo, foi definido alguns Resources: um padrão
(sem identificação da cultura no nome do arquivo), um para a linguagem EN-US
e outro para a linguagem PT-BR
.
Observação: Caso nennhuma cultura seja explícita no nome do arquivo, o .NET irá entender que aquele arquivo é o 'padrão' para ser utilizado quando nenhum arquivo é encontrado para a linguagem que foi requerida.
Para que a CultureInfo da uma Thread seja definida automaticamente ao processar um request, o .NET disponibiliza um middleware para realizar esse processamento e realizar a definição de maneira fluída e sem esforços. Ele busca a cultura via queryparams, no qual o parâmetro culture
é o responsável por essa definição.
Para aplicar esse recurso, é necessário adicionar o service
e o middleware
:
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
// CULTURAS PERMITIDAS
string[] supportedCultures = ["pt-BR", "en-US"];
options
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
});
app.UseRequestLocalization();
Os resources foram utilizados em controller, para exemplificar o uso.
public class MessageController : ControllerBase
{
[HttpGet("messages:success")]
public IActionResult Success()
{
return Ok(new { Value = ResourceMessages.Success });
}
[HttpGet("messages:error")]
public IActionResult Error()
{
return Ok(new { Value = ResourceMessages.Error });
}
[HttpGet("messages:culture")]
public IActionResult Culture()
{
var currentCulture = Thread.CurrentThread.CurrentCulture.Name;
return Ok(new { Value = currentCulture });
}
}
Com o middleware e o service definidos, a definição da cultura pode ser definida via query params usando o param culture
, por exemplo: http://localhost:5075/messages:success?culture=pt-BR