Mensagens multi-linguagem em suas API´s em .Net Core com FR.Localizations
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!!