Uma pilha headless já possui sua renderização, então o Universally se encaixa como um serviço de tradução que seu servidor chama em vez de algo que fica na frente do seu site. Você envia texto, recebe texto de volta e decide onde ele é armazenado e quando é atualizado.
A API e as chaves estão cobertas em Integrar usando a API. Esta página é sobre quais partes dela se encaixam em um front-end desacoplado.
Qual endpoint se encaixa
A API de Tradução tem dois que importam aqui, e configurações headless geralmente querem o primeiro:
/v1/translate/strings |
/v1/translate/html |
|
|---|---|---|
| Você envia | até 500 strings por solicitação | uma página renderizada |
| Você recebe de volta | um mapa da string de origem para a tradução | o documento traduzido |
| Se encaixa | conteúdo vindo de um CMS como campos | páginas renderizadas no servidor que você estava prestes a retornar |
Com o endpoint de strings, seu CMS continua sendo a fonte da verdade. Puxe os campos que você precisa, envie os valores, armazene o que voltar com as mesmas chaves. Nada precisa adivinhar qual parte de uma página é conteúdo.
curl -X POST https://translator.universally.com/v1/translate/strings \
-H "X-API-Key: $UNIVERSALLY_KEY" \
-H "Content-Type: application/json" \
-d '{"strings":["Add to cart","Out of stock"],"targetLanguage":"es"}'
A resposta carrega as traduções mais um bloco de metadados: stringsReceived, stringsTranslated, skippedStrings e limitReached. Leia limitReached em todas as respostas. Quando for true, a resposta é parcial.
Uma string que não foi traduzida está ausente de translations, não é retornada inalterada. Procure cada chave com um fallback para seu próprio texto de origem (translations[s] ?? s), ou você renderizará undefined. Veja Traduzir strings.
Solicitações repetidas para texto já traduzido são atendidas do armazenamento e não custam nada a mais. Enviar fresh: true traduz novamente e retorna o resultado sem armazená-lo, então guarde sua própria cópia de qualquer coisa que você obter dessa forma: uma solicitação posterior sem fresh ainda retorna a tradução armazenada. Essas chamadas também não contam contra seu total de palavras.
Mantenha a chave no lado do servidor
A chave do projeto não deve chegar ao navegador. Qualquer coisa em JavaScript frontend, em um pacote mobile, ou em um repositório é público, e a chave pode gastar seu total de palavras. Chame a API do seu servidor ou etapa de build, então sirva o resultado armazenado para os clientes. Veja Encontre sua chave de API.
O que você possui
O plugin WordPress faz várias coisas além de chamar um endpoint. Através da API, elas são suas:
- Uma URL por idioma. Algo deve rotear
/es/pricing/para sua renderização em espanhol. O Universally não intercepta tráfego. Veja Subdomínios e subdiretórios para o formato a copiar. - Armazenamento e invalidação. Mantenha as traduções ao lado do seu conteúdo e reenvie uma string quando a origem mudar. Traduzir a cada solicitação é lento e inútil.
- O seletor de idioma. Nenhum widget é injetado, então a marcação e o estado são seus.
- hreflang e sitemaps. O plugin do WordPress emite alternâncias hreflang; seu próprio front-end emite seu próprio
<head>, então esses links fazem parte da integração. Veja tags hreflang.
O que ainda funciona sem o WordPress
Qualquer coisa que viva no painel em vez do plugin se aplica ao seu conteúdo da mesma forma:
- Regras de glossário, aplicadas quando a tradução acontece, para que os nomes das marcas se mantenham também no caminho da API.
- Editar traduções manualmente para corrigir uma string específica.
- Variantes de idioma e segmentação regional, já que uma variante é escolhida pelo código de idioma que você envia.