|Labs
Agende uma demoPlataforma
React (Lingo Compiler)
Alpha
React (MCP)React (i18n)CLI legado (v0)
Descontinuado

Lingo.dev CLI

  • Como funciona
  • Configuração
  • Guia rápido
  • Monorepos

Configuração

  • Formatos compatíveis
  • i18n.json
  • i18n.lock
  • Idiomas compatíveis

Recursos

  • Traduções existentes
  • Adicionar idiomas
  • Sobrescritas
  • Notas do tradutor
  • Chaves de tradução
  • Renomeação de chaves
  • Bloqueio de chaves
  • Ignorar chaves
  • Preservação de chaves
  • Extraia chaves com IA

Desempenho

  • Projetos de grande porte
  • Processamento paralelo
  • Estimativa de custo

Retradução

  • Retradução automática
  • Retradução
  • Remover traduções

Esta documentação cobre o CLI legado (v0) e foi descontinuada. A versão atual do CLI é a v1. Veja a documentação do CLI atual

Formatos compatíveis

A CLI da Lingo.dev usa tipos de bucket para processar e traduzir diferentes formatos de arquivo. Cada tipo de bucket é um parser dedicado, criado para um formato específico. Configure um ou mais buckets no seu i18n.json para definir quais arquivos a CLI deve traduzir.

Tipos de bucket#

Tipo de bucketFormatoModo de saída[locale] obrigatório
jsonArquivos JSONArquivos separados por idiomaSim
json5Arquivos JSON5Arquivos separados por idiomaSim
jsoncArquivos JSONC (com comentários)Arquivos separados por idiomaSim
json-dictionaryDicionário JSON (chave-valor simples)Arquivos separados por idiomaSim
yamlArquivos YAMLArquivos separados por idiomaSim
yaml-root-keyYAML com chaves raiz de idiomaAltera o arquivo de origemNão
markdownArquivos MarkdownArquivos separados por idiomaSim
mdxArquivos MDXArquivos separados por idiomaSim
markdocArquivos MarkdocArquivos separados por idiomaSim
htmlArquivos HTMLArquivos separados por idiomaSim
mjmlTemplates de e-mail em MJMLArquivos separados por idiomaSim
androidRecursos XML do AndroidArquivos separados por idiomaSim
xcode-stringsArquivos .strings do XcodeArquivos separados por idiomaSim
xcode-stringsdictArquivos .stringsdict do XcodeArquivos separados por idiomaSim
xcode-xcstringsCatálogos .xcstrings do XcodeAltera o arquivo de origemNão
flutterArquivos ARB do FlutterArquivos separados por idiomaSim
poArquivos PO do GNU gettextArquivos separados por idiomaSim
propertiesArquivos .properties do JavaArquivos separados por idiomaSim
csvArquivos CSVAltera o arquivo de origemNão
csv-per-localeArquivos CSV (um por idioma)Arquivos separados por idiomaSim
xmlArquivos XML genéricosArquivos separados por idiomaSim
xliffArquivos XLIFFArquivos separados por idiomaSim
srtArquivos de legenda SRTArquivos separados por idiomaSim
vttArquivos de legenda VTTArquivos separados por idiomaSim
phpArrays de localização em PHPArquivos separados por idiomaSim
typescriptArquivos TypeScriptArquivos separados por idiomaSim
vue-jsonBlocos JSON do Vue i18nArquivos separados por idiomaSim
txtArquivos de texto simplesArquivos separados por idiomaSim

Modos de saída#

Os buckets operam em um de dois modos de saída:

Arquivos separados por idioma — a CLI cria um arquivo distinto para cada idioma de destino. Os padrões de inclusão precisam conter o placeholder [locale]:

json
{
  "buckets": {
    "json": {
      "include": ["locales/[locale].json"]
    }
  }
}

Isso gera locales/en.json, locales/es.json, locales/fr.json etc.

Altera o arquivo de origem — a CLI grava as traduções no mesmo arquivo que contém o conteúdo de origem. O placeholder [locale] não é usado:

json
{
  "buckets": {
    "csv": {
      "include": ["translations.csv"]
    }
  }
}

Arquivos CSV geralmente armazenam todos os idiomas em colunas dentro de um único arquivo. Catálogos .xcstrings do Xcode e YAML com chaves raiz funcionam de forma parecida.

Exemplos de configuração#

Aplicativo web com JSON#

json
{
  "buckets": {
    "json": {
      "include": ["src/locales/[locale].json"],
      "lockedKeys": ["brand/name"]
    }
  }
}

Site de documentação com Markdown#

json
{
  "buckets": {
    "markdown": {
      "include": ["docs/[locale]/*.md"],
      "exclude": ["docs/[locale]/drafts/*.md"]
    }
  }
}

Aplicativo mobile (iOS + Android)#

json
{
  "buckets": {
    "xcode-xcstrings": {
      "include": ["ios/Localizable.xcstrings"]
    },
    "android": {
      "include": ["android/app/src/main/res/values-[locale]/strings.xml"]
    }
  }
}

Monorepo com vários formatos#

json
{
  "buckets": {
    "json": {
      "include": ["apps/web/locales/[locale].json"]
    },
    "mdx": {
      "include": ["packages/docs/content/[locale]/*.mdx"]
    },
    "flutter": {
      "include": ["apps/mobile/lib/l10n/app_[locale].arb"]
    }
  }
}

Recursos específicos de bucket#

Alguns buckets oferecem recursos adicionais além dos padrões de inclusão/exclusão:

RecursoBuckets compatíveisDescrição
Bloqueio de chavesFormatos de chave-valor (JSON, YAML etc.)Copiar valores de origem sem traduzir
Ignorar chavesFormatos de chave-valorExcluir chaves completamente dos arquivos de destino
Preservação de chavesFormatos de chave-valorInicializar uma vez e depois proteger contra atualizações
Notas para tradutoresJSONC, XCStringsFornecer contexto por meio de comentários para melhorar a tradução

Regras dos padrões de inclusão#

  • Os padrões são relativos à localização do arquivo i18n.json
  • Use [locale] como placeholder para códigos de idioma (obrigatório para buckets de "arquivos separados")
  • O asterisco (*) corresponde a qualquer nome de arquivo: locales/[locale]/*.json
  • Padrões recursivos (**) correspondem a arquivos em qualquer nível de profundidade: src/**/[locale].json, config/locales/**/[locale].yml. Quando um padrão usa **, node_modules, .git, dist, build, .next e .turbo são excluídos por padrão — adicione suas próprias entradas exclude por cima, conforme necessário (requer CLI 0.135.0+)
  • As extensões de arquivo não afetam o parsing — o tipo de bucket é que determina o parser

Próximos passos#

i18n.json
Referência completa de configuração
Key Locking
Proteja chaves específicas contra tradução
Traduções existentes
Adicione a CLI a um projeto que já tem traduções
Configuração inicial
Instale e configure a CLI

Esta página foi útil?

Max PrilutskiyMax Prilutskiy·Atualizado há 5 dias·4 min de leitura