Mensagens multi-linguagem em suas API´s em .Net Core com FR.Localizations

Fernando Mendes
JunDevelopers
Published in
4 min readSep 22, 2020

Olá Pessoal, tudo bem?

Em alguns projetos que desenvolvemos, eles são direcionados para público internacional, e desta forma necessitamos retornar mensagens de validação ou mensagens de regras de negócio com o idioma de onde o usuário está fazendo requisição.

Creio que vocês, já viram alguns sites, onde se tem a bandeira da nação no canto superior de alguns sites, onde você possa escolher o idioma que quer visualizar o site. Pois bem, para isso existe estratégias para realizar esse tipo de tradução de acordo com a escolha da nação.

Mas em API´s, onde temos que retornar mensagens de validação de campos ou mensagens de regras de negócio, também nesses casos, necessitamos retornar mensagens no idioma do usuário.

Para ajudar a ter isso de forma simples e prática, fiz uma biblioteca juntamente com meu amigo Ray Carneiro, que está disponível no nuget de nome FR.Localizations

Vamos agora criar uma API, e fazer a instalação da biblioteca em nosso projeto

Faça a instalação em seu projeto:

PM> Install-Package FR.Localizations

Depois de ter feito a instalação, vamos configurar nosso projeto, para a utilização da biblioteca FR.Localizations, no arquivo Startup.cs de sua aplicação, adicione no método ConfigureServices o middleware em específico:

public void ConfigureServices(IServiceCollection services)
{
..
..
services.AddFRLocalizations();
}

Criação dos arquivos multi-linguagem

Como vamos usar mensagens multi-linguagens, precisamos criar arquivos específicos com cada idioma, no exemplo, vamos usar Português(pt-br) e Inglês (en-US);

Em sua API, crie a pasta App_Data e adicione arquivos de nome resources.{language}.json

O language será nome da linguagem que você passará na header da requisição na chave Accept-Language.

Ex:

  • pt-BR (resources.pt-BR.json) -> Português Brasil
  • en-US (resources.en-US.json) -> Inglês

Nos arquivos, o conteúdo deverá estar desta forma:

resources.pt-BR.json

[
{
"Key": "MandatoryData",
"Value": "Dados obrigatórios"
},
{
"Key": "UserUnder",
"Value": "Usuário {0} com menos de 18 anos!"
}
]

resources.en-US.json

[
{
"Key": "MandatoryData",
"Value": "Mandatory data!"
},
{
"Key": "UserUnder",
"Value": "User {0} under 18!"
}
]

Percebam que o arquivo é chave e valor, e a chave é a mesma nos dois arquivos.

Criação de Enuns com chaves das mensagens

Como estamos usando um arquivo, de chave(Key) e valor(Value), necessitamos criar essas chaves no seu projeto. Pode-se criar como uma boa prática um Enum, contendo essas chaves pré-definidas

public class KeyMessage
{
public const string MandatoryData = "MandatoryData";
public const string UserUnder = "UserUnder";
}

Agora em nossa controller, vamos injetar a interface IStringLocalization no construtor

private readonly IStringLocalization _localization;public PersonController(IStringLocalization localization)
{
_localization = localization;
}

Agora no método vamos obter as mensagem de acordo com a chave da mensagem, configurada no arquivo .json, que está na pasta App_Data

Veja que posso passar parâmetros, para compor as mensagens, na chave UserUnder existe {0}, onde o parâmetro substituirá a chave {0}.

Vamos abrir o Postman, para realizar as requisições em nossa API.

Veja que estou passando no header da requisição o parâmetro Accept-Language, com o valor pt-BR

Ao executar, as mensagens vão estar em português

Agora vamos mudar o Accept-Language, para o valor en-US

Ao executar, as mensagens vão estar em inglês

Veja, que utilizando a biblioteca FR.Localizations conseguimos fazer com que as nossas mensagens sejam multi-linguagem, de forma simples e prática.

Espero que tenham gostado

Segue o exemplo em meu Github

E a página do Nuget

Até a próxima!!

--

--

Fernando Mendes
JunDevelopers

Software Architect .NET C# | Microsoft MVP 🏆🏆 | Co-Founder community JunDevelopers