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 bucket | Formato | Modo de saída | [locale] obrigatório |
|---|---|---|---|
json | Arquivos JSON | Arquivos separados por idioma | Sim |
json5 | Arquivos JSON5 | Arquivos separados por idioma | Sim |
jsonc | Arquivos JSONC (com comentários) | Arquivos separados por idioma | Sim |
json-dictionary | Dicionário JSON (chave-valor simples) | Arquivos separados por idioma | Sim |
yaml | Arquivos YAML | Arquivos separados por idioma | Sim |
yaml-root-key | YAML com chaves raiz de idioma | Altera o arquivo de origem | Não |
markdown | Arquivos Markdown | Arquivos separados por idioma | Sim |
mdx | Arquivos MDX | Arquivos separados por idioma | Sim |
markdoc | Arquivos Markdoc | Arquivos separados por idioma | Sim |
html | Arquivos HTML | Arquivos separados por idioma | Sim |
mjml | Templates de e-mail em MJML | Arquivos separados por idioma | Sim |
android | Recursos XML do Android | Arquivos separados por idioma | Sim |
xcode-strings | Arquivos .strings do Xcode | Arquivos separados por idioma | Sim |
xcode-stringsdict | Arquivos .stringsdict do Xcode | Arquivos separados por idioma | Sim |
xcode-xcstrings | Catálogos .xcstrings do Xcode | Altera o arquivo de origem | Não |
flutter | Arquivos ARB do Flutter | Arquivos separados por idioma | Sim |
po | Arquivos PO do GNU gettext | Arquivos separados por idioma | Sim |
properties | Arquivos .properties do Java | Arquivos separados por idioma | Sim |
csv | Arquivos CSV | Altera o arquivo de origem | Não |
csv-per-locale | Arquivos CSV (um por idioma) | Arquivos separados por idioma | Sim |
xml | Arquivos XML genéricos | Arquivos separados por idioma | Sim |
xliff | Arquivos XLIFF | Arquivos separados por idioma | Sim |
srt | Arquivos de legenda SRT | Arquivos separados por idioma | Sim |
vtt | Arquivos de legenda VTT | Arquivos separados por idioma | Sim |
php | Arrays de localização em PHP | Arquivos separados por idioma | Sim |
typescript | Arquivos TypeScript | Arquivos separados por idioma | Sim |
vue-json | Blocos JSON do Vue i18n | Arquivos separados por idioma | Sim |
txt | Arquivos de texto simples | Arquivos separados por idioma | Sim |
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]:
{
"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:
{
"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#
{
"buckets": {
"json": {
"include": ["src/locales/[locale].json"],
"lockedKeys": ["brand/name"]
}
}
}Site de documentação com Markdown#
{
"buckets": {
"markdown": {
"include": ["docs/[locale]/*.md"],
"exclude": ["docs/[locale]/drafts/*.md"]
}
}
}Aplicativo mobile (iOS + Android)#
{
"buckets": {
"xcode-xcstrings": {
"include": ["ios/Localizable.xcstrings"]
},
"android": {
"include": ["android/app/src/main/res/values-[locale]/strings.xml"]
}
}
}Monorepo com vários formatos#
{
"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:
| Recurso | Buckets compatíveis | Descrição |
|---|---|---|
| Bloqueio de chaves | Formatos de chave-valor (JSON, YAML etc.) | Copiar valores de origem sem traduzir |
| Ignorar chaves | Formatos de chave-valor | Excluir chaves completamente dos arquivos de destino |
| Preservação de chaves | Formatos de chave-valor | Inicializar uma vez e depois proteger contra atualizações |
| Notas para tradutores | JSONC, XCStrings | Fornecer 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,.nexte.turbosão excluídos por padrão — adicione suas próprias entradasexcludepor 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
