Referência
Configuração
Um arquivo na raiz do seu projeto, e o plugin recebe o mesmo objeto, então uma opção significa o mesmo para o seu build e para a linha de comandos. As flags vencem o arquivo.
export default {
sourceLocale: 'es',
locales: ['es', 'en', 'pt'],
};Os nomes aceitos são verbaly.config.js, .mjs, .ts, .mts e .json, lidos nessa ordem. Um config em TypeScript não precisa de mais nada instalado, e os imports dele podem omitir a extensão, como em ./src/i18n.
Todas as opções
| Opção | Padrão | O que faz |
|---|---|---|
sourceLocale | 'en' | O idioma em que você escreve |
locales | Os catálogos que encontra | Os seus idiomas. Se você os listar, a lista está completa; se não, cada arquivo JSON de dir conta como um |
dir | 'locales' | Onde vivem os catálogos |
root | Onde você executou o comando | A raiz do projeto contra a qual os outros caminhos são resolvidos |
include | src/**, app/** | Que arquivos são varridos em busca de mensagens e compilados. Um arquivo fora dele que escreve t`…` é apontado, com o padrão a adicionar, quando o seu build ou servidor de desenvolvimento começa. [] desliga a varredura, para um projeto cujos catálogos são escritos à mão |
exclude | node_modules, dist | Que arquivos são ignorados dentro disso |
routing | Segue o seu setup | Onde o idioma vive nos seus endereços. Ver Estratégia de URLs |
dts | Onde o seu framework os lê | Onde os tipos gerados são escritos, ou false para não escrever nenhum. Sem defini-lo, vão para src/verbaly.d.ts (a raiz quando não há src/), para .verbaly/types.d.ts no Next.js, que o Verbaly adiciona ao seu tsconfig.json, e para a pasta de tipos que o Astro e o Nuxt reservam para isso |
bundle | Nada excluído | exclude: grupos de mensagens que ficam no build e nunca chegam ao navegador |
render | Desligado | O espelho pré-traduzido para sites estáticos. As suas opções estão abaixo |
translate | Claude | Tudo o que a tradução automática precisa além do provedor: modelo, tamanho de lote, glossário, instruções |
icu | Os seus catálogos decidem | Força o parser de ICU a viajar. Só para mensagens que chegam ao seu app depois do build |
relative | Os seus catálogos decidem | O mesmo, para o formato de tempo relativo |
Dentro de render
Só para sites estáticos que publicam uma árvore de endereços por idioma. Adicionar esta seção é o que liga o espelho.
| Opção | O que faz |
|---|---|
baseUrl | O seu endereço público. Os alternates e o sitemap precisam dele |
site | O diretório construído a espelhar. Por padrão dist |
sitemap | Escreve um sitemap por idioma. Uma string dá nome ao arquivo |
exclude | Páginas a deixar de fora desse sitemap, por caminho dentro do diretório de build |
hreflang | Alternates recíprocos em cada página. Ligado por padrão |
redirect | Envia quem chega pela primeira vez ao seu idioma antes de a página pintar |
links | Os endereços reais por trás dos links com nome dentro das suas mensagens |
base | O prefixo de caminho, se o seu site não é servido a partir da raiz |
attribute | O atributo a procurar, se você renomeou data-verbaly |
inlineCatalog | Escreve em cada página as mensagens que ela renderiza, então uma página traduzida não baixa nenhum catálogo próprio |
clean | Remove páginas de idioma deixadas por um build anterior |
Dentro de translate
Tudo o que a tradução automática precisa além do provedor, para que uma execução se comporte igual para toda a equipe em vez de depender de quem escreveu o comando.
| Opção | O que faz |
|---|---|
provider | Quem traduz. 'claude' é o que vem posto; passe uma função e passa a ser seu, sem prender você a ninguém |
model | Qual modelo o provedor incluído usa. --model troca isso para uma única execução |
batchSize | Quantas mensagens vão em uma requisição, 20 por padrão. Diminua se as mensagens longas saem cortadas, aumente se forem curtas |
concurrency | Quantas requisições vão ao mesmo tempo, 4 por padrão. Diminua se o seu provedor limita o ritmo |
retries | Quantas vezes uma requisição que falhou por algo passageiro é tentada de novo, 2 por padrão |
instructions | O mesmo que você contaria a uma pessoa que traduz o seu produto: quanta formalidade usar, quão curto o rótulo de um botão precisa ficar, o que é o seu aplicativo |
glossary | Como um termo tem que sair. Você dá uma forma para todos os idiomas, que é como se diz deixe isto em paz, ou uma por idioma. Só são enviados os termos que o lote realmente contém |
Uma execução sobrevive a uma conexão ruim. As requisições que falham por algo passageiro são tentadas de novo, e se ainda assim uma não voltar, todo o resto fica escrito e o relatório nomeia as mensagens que não conseguiu preencher. Rodar translate de novo pede só essas, então uma conexão caída nunca custa a execução inteira duas vezes. O comando termina com 1 quando isso acontece, para que um script perceba.
Só no plugin
failOnMissing: true para um build com tudo o que faz o verbaly check falhar, para um projeto que publica sem CI. Sem ele, um build lista as chaves que faltam, as quebradas e as desconhecidas e termina: uma tradução faltando cai para o seu idioma fonte, e quem controla é o check no CI.