Executando verificação de segurança...
2

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?

Carregando publicação patrocinada...
5

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.

4

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

2

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.