A CLI do Lingo.dev usa tipos de bucket para processar e traduzir diferentes formatos de ficheiro. Cada tipo de bucket é um parser específico, criado para um formato concreto. Configure um ou mais buckets no seu i18n.json para definir que ficheiros a CLI deve traduzir.
Tipos de bucket#
| Tipo de bucket | Formato | Modo de saída | [locale] obrigatório |
|---|---|---|---|
json | Ficheiros JSON | Ficheiros separados por idioma | Sim |
json5 | Ficheiros JSON5 | Ficheiros separados por idioma | Sim |
jsonc | Ficheiros JSONC (com comentários) | Ficheiros separados por idioma | Sim |
json-dictionary | Dicionário JSON (chave-valor simples) | Ficheiros separados por idioma | Sim |
yaml | Ficheiros YAML | Ficheiros separados por idioma | Sim |
yaml-root-key | YAML com chaves de raiz por idioma | Altera o ficheiro de origem | Não |
markdown | Ficheiros Markdown | Ficheiros separados por idioma | Sim |
mdx | Ficheiros MDX | Ficheiros separados por idioma | Sim |
markdoc | Ficheiros Markdoc | Ficheiros separados por idioma | Sim |
html | Ficheiros HTML | Ficheiros separados por idioma | Sim |
mjml | Templates de email em MJML | Ficheiros separados por idioma | Sim |
android | Recursos XML do Android | Ficheiros separados por idioma | Sim |
xcode-strings | Ficheiros Xcode .strings | Ficheiros separados por idioma | Sim |
xcode-stringsdict | Ficheiros Xcode .stringsdict | Ficheiros separados por idioma | Sim |
xcode-xcstrings | Catálogos Xcode .xcstrings | Altera o ficheiro de origem | Não |
flutter | Ficheiros ARB do Flutter | Ficheiros separados por idioma | Sim |
po | Ficheiros PO do GNU gettext | Ficheiros separados por idioma | Sim |
properties | Ficheiros Java .properties | Ficheiros separados por idioma | Sim |
csv | Ficheiros CSV | Altera o ficheiro de origem | Não |
csv-per-locale | Ficheiros CSV (um por idioma) | Ficheiros separados por idioma | Sim |
xml | Ficheiros XML genéricos | Ficheiros separados por idioma | Sim |
xliff | Ficheiros XLIFF | Ficheiros separados por idioma | Sim |
srt | Ficheiros de legendas SRT | Ficheiros separados por idioma | Sim |
vtt | Ficheiros de legendas VTT | Ficheiros separados por idioma | Sim |
php | Arrays de localização em PHP | Ficheiros separados por idioma | Sim |
typescript | Ficheiros TypeScript | Ficheiros separados por idioma | Sim |
vue-json | Blocos JSON do Vue i18n | Ficheiros separados por idioma | Sim |
txt | Ficheiros de texto simples | Ficheiros separados por idioma | Sim |
Modos de saída#
Os buckets funcionam num de dois modos de saída:
Ficheiros separados por idioma — a CLI cria um ficheiro distinto para cada idioma de destino. Os padrões de inclusão têm de conter o placeholder [locale]:
{
"buckets": {
"json": {
"include": ["locales/[locale].json"]
}
}
}Isto gera locales/en.json, locales/es.json, locales/fr.json, etc.
Altera o ficheiro de origem — a CLI escreve as traduções no mesmo ficheiro que contém o conteúdo original. O placeholder [locale] não é utilizado:
{
"buckets": {
"csv": {
"include": ["translations.csv"]
}
}
}Os ficheiros CSV normalmente guardam todos os idiomas em colunas dentro de um único ficheiro. Os catálogos Xcode .xcstrings e o YAML com chaves de raiz funcionam de forma semelhante.
Exemplos de configuração#
Aplicação 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"]
}
}
}Aplicação móvel (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"]
}
}
}Funcionalidades específicas por bucket#
Alguns buckets suportam funcionalidades adicionais para além dos padrões de inclusão/exclusão:
| Funcionalidade | Buckets suportados | Descrição |
|---|---|---|
| Key Locking | Formatos de chave-valor (JSON, YAML, etc.) | Copiar os valores de origem sem traduzir |
| Key Ignoring | Formatos de chave-valor | Excluir completamente as chaves dos ficheiros de destino |
| Key Preserving | Formatos de chave-valor | Inicializar uma vez e depois proteger contra atualizações |
| Translator Notes | JSONC, XCStrings | Fornecer contexto através de comentários para melhorar a tradução |
Regras dos padrões de inclusão#
- Os padrões são relativos à localização do ficheiro
i18n.json - Use
[locale]como placeholder para os códigos de idioma (obrigatório para buckets de "ficheiros separados") - O asterisco (
*) corresponde a qualquer nome de ficheiro:locales/[locale]/*.json - Os padrões recursivos (
**) correspondem a ficheiros em qualquer profundidade:src/**/[locale].json,config/locales/**/[locale].yml. Quando um padrão usa**,node_modules,.git,dist,build,.nexte.turbosão excluídos por predefinição — adicione as suas próprias entradasexcludeconforme necessário (requer CLI 0.135.0+) - As extensões dos ficheiros não afetam o processamento — o tipo de bucket determina o parser
