A CLI do Lingo.dev traduz arquivos estáticos no seu repositório — Markdown, MDX, Markdoc, JSON, YAML, legendas e muito mais — com um engine de localização configurado. Basta apontar para o seu conteúdo, executar uma vez e obter os arquivos traduzidos ao lado dos arquivos de origem.
Tipos de conteúdo compatíveis#
A CLI detecta o formato de cada arquivo pela extensão — não há nenhum tipo de bucket para configurar. O idioma fica no caminho (content/en/x.md vira content/de/x.md), então não é preciso usar o placeholder [locale].
| Tipo de conteúdo | Formato | Exemplo de caminho |
|---|---|---|
| Documentação | Markdown | docs/en/getting-started.md |
| Documentação | MDX | docs/en/getting-started.mdx |
| Documentação | Markdoc | docs/en/getting-started.mdoc |
| Dados estruturados | JSON | data/en.json |
| Dados estruturados | YAML | data/en.yaml |
| Posts de blog | Markdown / MDX | blog/en/post-slug.md |
| Localização | Gettext PO | locale/en/messages.po |
| Localização | XLIFF | locale/en.xliff |
| Legendas | SRT | subs/en/intro.srt |
Consulte a Referência de formatos para ver a lista completa de tipos de arquivo compatíveis.
Ainda não compatível com a nova CLI
CSV (csv-per-locale), legendas VTT, .txt em texto simples e .properties em Java ainda não têm suporte na nova CLI. Por enquanto, mantenha esses arquivos na CLI legada e acompanhe o changelog para novidades.
Pré-requisitos#
Cada execução envia o conteúdo por um engine de localização — a configuração que define qual modelo de LLM, glossário, voz da marca e regras serão aplicados. Crie um no dashboard do Lingo.dev e, em seguida, configure o CLI (Node 22+):
npm install -g @lingo.dev/cli
lingo login
lingo init
lingo linklingo init e lingo link criam .lingo/config.json, conectando a CLI à sua organização e à sua engine. Faça commit desse arquivo para que todos os ambientes compartilhem a mesma configuração.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "docs/en/getting-started.md" }]
}Em CI, ignore lingo login e forneça LINGO_API_KEY como variável de ambiente. Gere uma em chaves de API.
Sites de documentação#
A maioria dos frameworks de documentação organiza o conteúdo traduzido em diretórios por idioma. Adicione um padrão por arquivo de origem (ou um glob) a files. A CLI preserva frontmatter, blocos de código e a sintaxe dos componentes ao traduzir Markdown, MDX e Markdoc.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "docs/en/getting-started.md" },
{ "pattern": "docs/en/setup.mdx" }
]
}Execute a primeira tradução para preencher todos os idiomas de destino:
lingo push --backfill-missingNas execuções seguintes, lingo push traduz apenas o que mudou. Use lingo pull para buscar traduções produzidas em outro lugar.
Ajuste o caminho de origem para seguir a convenção de diretórios do seu framework:
| Framework | Convenção de diretório por idioma | Referência |
|---|---|---|
| Docusaurus | i18n/[locale]/docusaurus-plugin-content-docs/current/ | guia de i18n do Docusaurus |
| Nextra | Páginas por idioma ou dicionários JSON | documentação do Nextra |
| Hugo | content/[locale]/ | guia multilíngue do Hugo |
| Astro | src/content/[locale]/ ou dicionários JSON | guia de i18n do Astro |
| VitePress | Prefixo de diretório [locale]/ | i18n do VitePress |
| MkDocs | docs/ por idioma com plugin de i18n | plugin de i18n do MkDocs |
Componentes MDX
A tradução de MDX preserva a sintaxe dos componentes JSX. Componentes personalizados como <Callout>, <Tabs> e <CodeBlock> passam sem alterações — apenas o conteúdo de texto dentro deles é traduzido.
Dados estruturados#
Arquivos JSON e YAML são traduzidos automaticamente com base na extensão. Use controles de chave para evitar que valores não traduzíveis (IDs, URLs, flags de configuração) sejam alterados.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [
{ "pattern": "content/en.json" },
{ "pattern": "data/en.yaml" }
]
}YAML genérico não precisa de um campo format. Apenas yaml-openapi, yaml-root-key e android exigem um "format" explícito na entrada do arquivo.
YAML com chave raiz de idioma
Arquivos YAML que usam o código do idioma como chave raiz (comum no Rails e no Hugo) precisam de um "format": "yaml-root-key" explícito — a chave raiz é reescrita para o idioma de destino. Consulte a Referência de formatos.
Legendas#
Arquivos de legenda SRT são traduzidos com base na extensão. A CLI preserva todos os dados de tempo, índices de cue e tags de formatação — apenas o conteúdo de texto é traduzido.
{
"orgId": "org_abc123",
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocales": ["es", "fr", "de", "ja"],
"files": [{ "pattern": "subs/en/intro.srt" }]
}VTT ainda não compatível
Legendas WebVTT (.vtt) ainda não são compatíveis com a nova CLI. Por enquanto, mantenha os arquivos VTT na CLI legada e acompanhe o changelog para novidades.
Trabalhando com grandes volumes de conteúdo#
Repositórios de conteúdo estático podem ter milhares de arquivos. A CLI lida com isso com eficiência:
| Mecanismo | Como ajuda |
|---|---|
| Estado da execução | .lingo/lock.json rastreia as fingerprints do conteúdo de origem, então lingo push traduz apenas arquivos novos ou modificados. Faça commit dele; ele é regenerado a cada push. |
| Paralelismo no servidor | A engine paraleliza a tradução para você — não há nenhuma flag de concorrência para ajustar. |
| Execuções direcionadas | Restrinja a execução a arquivos específicos com um glob: lingo push "docs/en/**". |
Para verificar se as traduções estão atualizadas sem gravar arquivos — útil como gate de CI — execute lingo check.
