Como internacionalizar um endpoint de API?
Estou criando um projeto mobile e simulando dados de API criando arquivos JSON, porém, fiquei na dúvida ontem de como traduzir tudo de acordo com a lingua do usuário...
Por exemplo, o JSON abaixo está todo em inglês e simula um endpoint de API.
{
"category": "Destinations",
"question": "How can I learn more about the history of the destination?",
"answer": "Each destination on Nomads has a section dedicated to the history and interesting facts about the region, helping you get to know the place before you visit."
}
Mas se o usuário for brasileiro eu teria que ter outro endpoint na API apenas com os mesmos dados só que em português e assim por diante? Ou eu preciso colocar uma camada de API de tradução entre as requisições ou algo do tipo?
Tem várias formas de lidar com isto, das mais simples é criar um objeto com as opções
{
"en_US": {
"category": "Destinations",
"question": "How can I learn more about the history of the destination?",
"answer": "Each destination on Nomads has a section dedicated to the history and interesting facts about the region, helping you get to know the place before you visit."
},
"pt_BR": {
"category": "Destinos",
"question": "Como posso aprender mais sobre a história do destino?",
"answer": "Cada destino no Nomads tem uma seção dedicada à história e fatos interessantes sobre a região, ajudando você a conhecer o local antes da visita."
}
}
pode também selecionar a linguagem pela query, e retornar só oq precisa.
/v1/endpointY/{lang}/
ou
/v1/endpointY?lang=pt_br
mas dê uma pesquisada sobre i18n+seuFramework
Opcao 1
Cara, na minha mente vem a opcao de criar uma traducao mesmo, por exemplo, pra esse seu JSON, tu criaria um arquivo chamado pt-BR.json
e adicionaria:
{
"category": "Destinos",
"question": "Como posso aprender mais sobre a história do destino?",
"answer": "Cada destino no Nomads tem uma seção dedicada à história e fatos interessantes sobre a região, ajudando você a conhecer o lugar antes de visitar."
}
E na sua service vc poderia fazer algo do tipo:
const translations = {
"en": require('./translations/en.json'),
"pt-BR": require('./translations/pt-BR.json')
};
app.get('/api/faq', (req, res) => {
const language = req.headers['accept-language'] || 'en';
const translation = translations[language] || translations['en'];
res.json(translation);
});
lembrando que o const language = req.headers['accept-language'] || 'en';
vc ta utilizando o cabeçalho HTTP Accept-Language
pra detectar o idioma.
Opcao 2
Uma estrutura mais simples diretamente na service, algo como:
const faqData = {
"category": "faq.category",
"question": "faq.question",
"answer": "faq.answer"
};
app.get('/api/faq', (req, res) => {
const language = req.headers['accept-language'] || 'en';
const translation = translations[language] || translations['en'];
const translatedFaqData = {
category: translation[faqData.category],
question: translation[faqData.question],
answer: translation[faqData.answer]
};
res.json(translatedFaqData);
});
Opcao 3
Mete uma GeminiAPI pra traduzir a request pra pt-BR kkk, ja fiz isso mas pra projeto pequeno, nao sei como seria a escalabilidade disso.
Sugestão: faz tua API com foco em um público alvo, ou seja, um "default" language. Se o parâmetro vier preenchido por um público adicional ai sim coloca uma método de tradução da resposta. Talvez, nem valerá a pena essa funcionalidade de traduzir ,pois podem estar satisfatórios com o idioma default mesmo. Custo computacional de traduções não é baixo, reflita se vale a pena.