Skip to content

Referência de configuração

sourceLocale

Código BCP-47 para o idioma de origem (por exemplo, "en-GB", "en", "pt-BR"). Nenhum arquivo de tradução é gerado para este locale — a própria string da chave é o texto de origem.

Deve coincidir com o SOURCE_LOCALE exportado do seu arquivo de configuração de i18n em tempo de execução (src/i18n.ts / src/i18n.js).


targetLocales

Matriz de códigos de locale BCP-47 para os quais traduzir (por exemplo, ["de", "fr", "es", "pt-BR"]).

targetLocales é a lista principal de locales para tradução da interface e a lista padrão de locales para blocos de documentação. Use generate-ui-languages para gerar o manifesto ui-languages.json a partir de sourceLocale + targetLocales.


uiLanguage (opcional)

Código BCP-47 para o idioma da interface do usuário da ferramenta (ajuda da CLI, logs/resumos e o Painel de Tradução). É independente de sourceLocale / targetLocales e é substituído pelo sinalizador -L / --ui-lang e pela variável de ambiente AI_I18N_LANG. Valores desconhecidos são degradados para o idioma de origem (en-GB) — não há validação estrita. Consulte Idioma da interface do usuário da ferramenta.


languagesManifestPath (opcional)

String opcional de nível raiz (não aninhada em ui). Caminho onde extract e generate-ui-languages gravam o manifesto ui-languages.json, e onde a CLI o lê para nomes de exibição e pós-processamento da lista de idiomas. Quando omitido, o padrão é ui.flatOutputDir/ui-languages.json no carregamento da configuração.

Use isso quando:

  • O manifesto deve residir fora de ui.flatOutputDir (por exemplo, ao lado dos auxiliares do aplicativo em src/i18n/).
  • Você deseja que o pós-processamento do seletor de idioma (languageListBlock) construa rótulos de localidade a partir do manifesto do projeto, em vez de apenas o catálogo mestre empacotado.

includeUiLanguageEnglishNames não lê este arquivo — ele usa o catálogo mestre empacotado (veja ui.uiExtractor abaixo).

Legado: uiLanguagesPath de nível raiz ainda é aceito ao carregar um arquivo de configuração e é reescrito automaticamente para languagesManifestPath.


concurrency (opcional)

Número máximo de locales de destino traduzidos simultaneamente (translate-ui, translate-docs, translate-svg e as etapas correspondentes dentro de sync). Se omitido, a CLI usa 4 para tradução de interface e 3 para tradução de documentação (padrões embutidos). Substitua por execução com -j / --concurrency.


batchConcurrency (opcional)

translate-docs, translate-svg e translate-json (e as etapas correspondentes dentro de sync): solicitações em lote de LLM paralelas máximas por arquivo (cada lote pode conter muitos segmentos). Padrão 4 quando omitido. Ignorado por translate-ui. Substitua por -b / --batch-concurrency.


fileConcurrency (opcional)

Número máximo de arquivos processados simultaneamente dentro de um único idioma durante translate-docs e sync. Quando definido como um valor maior que 1, os arquivos dentro do mesmo idioma são processados em paralelo usando um semáforo para controlar o uso de memória. O valor padrão é 1 (processamento sequencial) quando omitido. Valores mais altos podem melhorar significativamente o desempenho em operações limitadas por E/S, especialmente quando todos os segmentos já estão em cache (sem chamadas à API necessárias).

Exemplo:

json
{
  "fileConcurrency": 4
}

Caso de uso: Defina isso como 2-4 ao executar sync --force-update com 100% de acertos no cache para reduzir o tempo total de processamento. A melhoria é mais perceptível com muitos arquivos pequenos.


batchSize / maxBatchChars (opcional)

Agrupamento de segmentos para translate-docs, translate-svg e translate-json: quantos segmentos por solicitação de API e um limite de caracteres. Padrões: 20 segmentos, 4096 caracteres (quando omitido).


provider e providers

provider (nível superior, opcional) seleciona a chave do provedor ativo de providers. É opcional quando exatamente um provedor é configurado; obrigatório quando mais de um é configurado.

providers (nível superior) mapeia uma chave de provedor para seu bloco. As chaves internas (consulte a tabela de predefinições abaixo) precisam apenas de translationModels; qualquer outra chave define um endpoint personalizado compatível com OpenAI e requer baseUrl (mais apiKeyEnv, a menos que o endpoint não precise de chave).

Cada bloco providers.<name> aceita:

  • translationModels Lista ordenada preferencial de IDs de modelo (IDs puros do upstream, sem o prefixo provider/; IDs do OpenRouter mantêm sua forma nativa vendor/model). O primeiro é tentado primeiro; as entradas posteriores são fallbacks em caso de erro. Esta é a cadeia padrão global para cada pipeline quando nenhum nível mais específico se aplica.
  • uiModels (opcional) Lista de modelos ordenada apenas para UI para translate-ui, geração de plurais (Etapa 0 e Passagem B) e proofread-ui. Tentada após qualquer entrada correspondente em localeModels para a localidade de destino, antes de translationModels.
  • localeModels (opcional) Substituições por localidade para todos os pipelines de tradução. Array de objetos { "locale": "<BCP-47>", "models": ["…"] }. As tags de localidade são comparadas sem distinção entre maiúsculas e minúsculas (pt-br = pt-BR). A lista de cada localidade é tentada primeiro apenas para aquela localidade, seguida pelos níveis específicos do pipeline (uiModels para UI) e translationModels. Chaves de localidade normalizadas duplicadas são rejeitadas no carregamento da configuração.
  • baseUrl URL base compatível com OpenAI. Substitui a URL base predefinida; obrigatório para um provedor não predefinido.
  • apiKeyEnv Variável de ambiente que contém a chave da API. Substitui a variável de ambiente predefinida.
  • headers Cabeçalhos HTTP extras enviados com cada solicitação para este provedor.
  • maxTokens Máximo de tokens de conclusão por solicitação. Padrão: 8192.
  • temperature Temperatura de amostragem. Padrão: 0.2.
  • requestTimeoutMs Tempo máximo em milissegundos para aguardar por cada solicitação. Padrão: 30000 (30 segundos).

Presets de provedores integrados (chave — URL base — variável de ambiente da chave de API):

ProvedorURL BaseVariável de ambiente da chave de API
openrouterhttps://openrouter.ai/api/v1OPENROUTER_API_KEY
openaihttps://api.openai.com/v1OPENAI_API_KEY
anthropichttps://api.anthropic.com/v1ANTHROPIC_API_KEY
geminihttps://generativelanguage.googleapis.com/v1beta/openaiGOOGLE_API_KEY
deepseekhttps://api.deepseek.comDEEPSEEK_API_KEY
cerebrashttps://api.cerebras.ai/v1CEREBRAS_API_KEY
groqhttps://api.groq.com/openai/v1GROQ_API_KEY
mistralhttps://api.mistral.ai/v1MISTRAL_API_KEY
xaihttps://api.x.ai/v1XAI_API_KEY
nvidiahttps://integrate.api.nvidia.com/v1NVIDIA_API_KEY
alibabahttps://dashscope-intl.aliyuncs.com/compatible-mode/v1ALIBABA_API_KEY
apifunhttps://api.apikey.fun/v1APIFUN_API_KEY
ollamahttp://localhost:11434/v1(nenhum)

Um bloco openrouter legado de nível superior (com baseUrl, translationModels, defaultModel, fallbackModel, maxTokens, temperature, requestTimeoutMs) ainda é aceito e é migrado automaticamente para providers.openrouter (com provider: "openrouter") ao carregar; defaultModel / fallbackModel são incorporados em translationModels.

Para um exemplo executável que configura vários provedores em uma configuração e alterna entre eles com -P, consulte examples/multi-provider (openai, anthropic, nvidia e deepseek no mesmo documento).

Por que usar vários modelos: Diferentes provedores e modelos têm custos variados e oferecem diferentes níveis de qualidade entre idiomas e localidades. Configure translationModels como uma cadeia de fallback ordenada (em vez de um único modelo) para que a CLI possa tentar o próximo modelo se uma solicitação falhar.

Considere a lista abaixo como uma linha de base que você pode expandir: se a tradução para um local específico for ruim ou malsucedida, pesquise quais modelos suportam esse idioma ou script de forma eficaz (consulte recursos online ou a documentação do seu provedor) e adicione esses IDs de modelo como outras alternativas.

Esses IDs de modelo correspondem a ai-i18n-tools init [-P <provider>] quando -P openrouter (o padrão). Outros presets obtêm IDs de modelo nativos de init -P <provider> — consulte Provedores integrados.

Esta lista foi testada quanto à ampla cobertura de localidades em um grande projeto de documentação com 36 localidades de destino; serve como um padrão prático, mas não há garantia de bom desempenho para todas as localidades.

Exemplo translationModels (mesmos padrões que ai-i18n-tools init [-P <provider>]):

Lista padrão de fallback para translationModels
json
"translationModels": [
  "google/gemini-2.5-flash",
  "meta-llama/llama-3.3-70b-instruct",
  "openai/gpt-4o-mini",
  "google/gemma-4-26b-a4b-it",
  "~anthropic/claude-haiku-latest",
  "z-ai/glm-5.2",
  "google/gemini-3.5-flash",
  "~anthropic/claude-sonnet-latest"
  // … add more fallback models as needed
]

uiModels recomendado: As strings da interface do usuário são curtas, mas altamente visíveis — um modelo premium geralmente melhora o tom, os plurais e a consistência. O uiModels opcional é tentado após qualquer entrada localeModels correspondente e antes do translationModels (consulte a lista de campos acima). Exemplo:

uiModels recomendados para tradução de interface do usuário
json
"uiModels": [
  "~anthropic/claude-sonnet-latest",
  "z-ai/glm-5.2"
]

localeModels recomendado para idiomas asiáticos: Locales japoneses, coreanos e chineses geralmente se beneficiam de modelos ajustados para esses scripts. Adicione substituições por localidade que são tentadas primeiro (antes de uiModels / translationModels) quando a localidade de destino corresponde:

localeModels recomendados para ja, ko, zh-Hans, zh-Hant
json
"localeModels": [
  { "locale": "ja",      "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] },
  { "locale": "ko",      "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] },
  { "locale": "zh-Hans", "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] },
  { "locale": "zh-Hant", "models": [ "z-ai/glm-5.2", "minimax/minimax-m2.7" ] }
]

Defina a variável de ambiente da chave de API do provedor ativo (consulte a tabela de presets) em seu ambiente ou arquivo .env.

Antes de alterar as listas de modelos, execute ai-i18n-tools check-models. Para qualquer provedor, ele verifica cada ID de modelo configurado (translationModels, uiModels e todas as entradas localeModels) em relação à lista de modelos ativos desse provedor (GET /models), relata IDs ausentes ou que excederam expiration_date, lista os modelos válidos e sai com um código diferente de zero quando qualquer ID configurado é inválido. Quando o provedor retorna preços (por exemplo, OpenRouter), ele também mostra o preço estimado de entrada/saída (USD por 1M de tokens).

Para comparar os modelos configurados em trabalhos de tradução reais, execute ai-i18n-tools bench-models. Ele compara cada ID de modelo exclusivo de translationModels, uiModels e localeModels traduzindo uma amostra por meio de cada um isoladamente (em paralelo, limitado por concurrency) e imprime tokens de entrada/saída por modelo, tempo de execução e custo em USD, para que você possa pesar a velocidade em relação ao preço antes de decidir sobre as listas de modelos.


features

CampoPipelineDescrição
translateUIStrings1Extrair t("…") / i18n.t("…") para strings.json, então traduzir entradas e escrever JSON plano por localidade (a extração é executada automaticamente; use extract autônomo para atualizar apenas o catálogo).
translateDocs2Traduzir .md / .mdx / .astro páginas; shell JSON do Docusaurus quando docs[].docusaurusCatalogDir estiver definido; Nextra _meta / dicionário quando configurado; tema do VitePress quando docsOutput.vitepressThemeCatalog estiver definido; Fumadocs meta.json / catálogo de interface do usuário quando docsOutput.style for "fumadocs".
translateJson3JSON aninhado arbitrário sob json[] (translate-json).
translateSVGTraduzir arquivos .svg (requer o bloco svg no nível superior).

Traduz arquivos SVG com translate-svg quando features.translateSVG é verdadeiro e um bloco svg de nível superior está configurado. O comando sync executa essa etapa quando ambos estiverem definidos (a menos que --no-svg).


ui

  • sourceRoots
    Diretórios ou padrões glob (relativos ao diretório de trabalho atual) verificados para chamadas t("…"). Suporta padrões como src/ ou ["src/**/*.ts"].
  • stringsJson
    Caminho para o arquivo de catálogo mestre. Atualizado por extract.
  • flatOutputDir
    Diretório onde os arquivos JSON por localidade são gravados (de.json, etc.).
  • uiExtractor.funcNames (ou legado reactExtractor.funcNames)
    Nomes de funções adicionais para verificar (padrão: ["t", "i18n.t"]).
  • uiExtractor.extensions (ou legado reactExtractor.extensions)
    Extensões de arquivo a serem incluídas (padrão: [".js", ".jsx", ".ts", ".tsx"]). Adicione .astro para frontmatter do Astro e expressões de template.
  • uiExtractor.includePackageDescription (ou legado reactExtractor.includePackageDescription)
    Quando true (padrão), extract também inclui package.json description como uma string de UI quando presente.
  • uiExtractor.packageJsonPath (ou legado reactExtractor.packageJsonPath)
    Caminho personalizado para o arquivo package.json usado para essa extração de descrição opcional.
  • uiExtractor.includeUiLanguageEnglishNames (ou legado reactExtractor.includeUiLanguageEnglishNames)

Quando true (padrão false), extract também adiciona cada englishName do catálogo mestre de ui-languages empacotado (construído a partir de sourceLocale + targetLocales) a strings.json quando ainda não presente na varredura da fonte (mesmas chaves de hash). Não lê languagesManifestPath.


cacheDir

  • cacheDir Diretório de cache SQLite (compartilhado por todos os blocos docs). Padrão .translation-cache. Reutilize entre execuções. Se você estiver migrando de um cache de tradução de documentos personalizado, arquive-o ou exclua-o — cacheDir cria seu próprio banco de dados SQLite e não é compatível com outros esquemas.

Melhor prática para exclusões no git:

  • Exclua o conteúdo da pasta de cache de tradução (por exemplo, usando .gitignore ou .git/info/exclude) para evitar o commit de artefatos temporários de cache.
  • Mantenha cache.db (não exclua rotineiramente), pois preservar o cache SQLite evita a re-tradução de segmentos inalterados. Isso economiza tempo de execução e custos de API ao atualizar ou modificar software que usa ai-i18n-tools.
  • Exclua arquivos temporários e de log para evitar o commit de arquivos de backup e depuração.

Exemplo:

gitignore
# Translation cache directory
.translation-cache/*

# Keep SQLite cache for reuse
!.translation-cache/cache.db

# Temporary and log files
*.tmp
*.log

docs

Array de blocos de pipeline de documentação. translate-docs e a fase de documentos de sync processam cada bloco em ordem. Chaves legadas ainda são aceitas no momento do carregamento e reescritas quando o arquivo de configuração é gravável; prefira os nomes atuais em novas configurações.

Chave legadaChave/comportamento atual
documentationsdocs
markdownOutputdocs[].docsOutput
jsonSourcedocs[].docusaurusCatalogDir
openrouter de nível superiorproviders.openrouter + provider: "openrouter"
features.translateMarkdownfeatures.translateDocs
features.translateJSONremovido (use docs[].docusaurusCatalogDir ou json[])
features.extractUIStringsremovido (extract é executado antes da tradução da interface do usuário)
glossary.uiGlossaryFromStringsJsonglossary.uiGlossary
ui.reactExtractorui.uiExtractor (alias ainda aceito)
svg.svgExtractor.forceLowercasesvg.forceLowercase

Fontes de conteúdo

  • description Nota opcional legível por humanos para este bloco (não usada para tradução). É prefixada no título do translate-docs 🌐 quando definida; também exibida nos cabeçalhos das seções status.
  • contentPaths Corpos de páginas em Markdown/MDX e modelos .astro a serem traduzidos (translate-docs examina estes por .md, .mdx e .astro). Suporta caminhos de diretório ou padrões glob (por exemplo, "docs/**/*.md", "guides/*.mdx", "src/pages/index.astro"). É daí que vem o conteúdo textual da documentação localizada.
  • sourceFiles Alias opcional mesclado em contentPaths no carregamento.
  • targetLocales Subconjunto opcional de localidades apenas para este bloco (caso contrário, usa a targetLocales raiz). As localidades efetivas de documentação são a união entre todos os blocos.
  • docusaurusCatalogDir Opcional. Diretório de origem para catálogos de rótulos JSON do Docusaurus para este bloco (por exemplo, "i18n/en" de docusaurus write-translations). Os corpos das páginas sempre vêm de contentPaths; docusaurusCatalogDir apenas fornece JSON de shell/UI, não MDX.
  • nextraMetaGlob Glob(s) opcionais para _meta.ts / _meta.tsx / _meta.js do Nextra em docsRoot. Quando docsOutput.style é "nextra" e isso é omitido, todos os arquivos _meta em docsRoot são coletados automaticamente.
  • nextraMetaTranslatableKeys Nomes de propriedades opcionais cujos valores de string são traduzidos em objetos _meta do Nextra (padrão: title, display, breadcrumb).
  • nextraDictionaryPath Módulo de dicionário de tema Nextra em inglês opcional (por exemplo, "app/_dictionaries/en.ts"). Traduzido para {dir}/{locale}.ts durante translate-docs.
  • nextraDictionaryOutputTemplate Modelo de saída opcional para módulos de dicionário de localidade (padrão: {dir}/{locale}.ts em relação ao diretório do dicionário).

Layout de saída

  • outputDir Diretório raiz para a saída traduzida para este bloco.
  • docsOutput.style"nested" (padrão), "flat", "doc-system", ou aliases "docusaurus" / "astro-starlight" / "vitepress" / "nextra".
  • docsOutput.localeSubpath Segmento de caminho entre {locale}/ e {relativeToDocsRoot} para doc-system (obrigatório ao usar style: "doc-system" diretamente; predefinido ao usar um alias). Use "" para pastas de localidade no estilo Starlight.
  • docsOutput.docsRoot Raiz dos documentos de origem para o layout do Docusaurus (por exemplo, "docs"). Padrão "docs" quando omitido.
  • docsOutput.pathTemplate Caminho de saída de markdown personalizado. Espaços reservados: "{outputDir}", "{locale}", "{LOCALE}", "{llocale}", "{relPath}", "{stem}", "{basename}", "{extension}", "{docsRoot}", "{relativeToDocsRoot}".
  • docsOutput.jsonPathTemplate Caminho de saída JSON personalizado para arquivos de rótulo. Suporta os mesmos espaços reservados que pathTemplate.
  • docsOutput.localePathLowercase Quando true, layouts de saída integrados (nested, flat, doc-system sem pathTemplate) usam segmentos de localidade em minúsculas nos caminhos. Padrão false; astro-starlight e doc-system com localeSubpath vazio padronizam para true no carregamento da configuração.
  • docsOutput.flatPreserveRelativeDir Quando docsOutput.style = "flat", mantenha os subdiretórios de origem para que arquivos com o mesmo nome base não colidam. Padrão false.
  • docsOutput.rewriteRelativeLinks Reescreve links relativos após a tradução (ativado automaticamente quando docsOutput.style = "flat" e sem pathTemplate personalizado).
  • docsOutput.linkRewriteDocsRoot Raiz do repositório usada ao calcular prefixos de reescrita de link plano. Geralmente, deixe como ".", a menos que sua documentação traduzida esteja em uma raiz de projeto diferente.
  • docsOutput.rewriteVitepressLinks Quando true, executa o normalizador de link do VitePress após a tradução. O padrão é ativado quando docsOutput.style é "vitepress". Use com qualquer layout doc-system onde as pastas de localidade ficam ao lado do inglês em docsRoot. Reescreve caminhos docs/guide/… no estilo README para rotas de site (/guide/…) e links ../guide/… relativos à localidade. Para links para arquivos de repositório fora da árvore do VitePress (LICENSE, examples/), use URLs completas na fonte em inglês — consulte Integração VitePress — README como a página inicial da documentação.
  • docsOutput.rewriteNextraLinks Quando true, executa o normalizador de link do Nextra após a tradução. O padrão é ativado quando docsOutput.style é "nextra". Reescreve content/en/… e caminhos .mdx relativos para rotas de site neutras em relação à localidade (/guide/…) para Next.js i18n. Consulte Integração Nextra — Convenções de link.
  • docsOutput.fumadocsParser"dot" (padrão) ou "dir". Dot escreve stem.{locale}.mdx ao lado das fontes em inglês; dir escreve pastas de localidade como Nextra. Consulte Integração Fumadocs — Layout da página.
  • docsOutput.rewriteFumadocsLinks Quando true, executa o normalizador de link do Fumadocs após a tradução. O padrão é ativado quando docsOutput.style é "fumadocs". Reescreve caminhos de conteúdo e links .mdx relativos para rotas /docs/….
  • docsOutput.fumadocsUiCatalog Opcional. Catálogo de substituição da interface do usuário do Fumadocs + tradução dentro de translate-docs. Campos: sourcePath (por exemplo, lib/layout.shared.ts), catalogPath (JSON em inglês gerado), outputPathTemplate opcional (padrão: ui.{locale}.json ao lado de catalogPath).
  • docs[].fumadocsMetaGlob Glob(s) opcionais para coleta meta.json quando docsOutput.style é "fumadocs". Padrão: meta.json recursivo em docsOutput.docsRoot.
  • docs[].fumadocsMetaTranslatableKeys Nomes de propriedades cujos valores de string são traduzidos nos meta.json do Fumadocs (padrão: title, description).
  • docsOutput.vitepressThemeCatalog Opcional. Catálogo de bootstrap e tradução do tema/nav/barra lateral do VitePress dentro de translate-docs. Campos: configPath (configuração do VitePress com strings de tema), catalogPath (JSON em inglês aninhado gerado), opcional outputPathTemplate (padrão: theme.{locale}.json ao lado de catalogPath).

Pós-processamento

  • docsOutput.postProcessing Transformações opcionais no corpo markdown traduzido (chaves YAML e valores de front matter não-prosa são preservados). Executa após a remontagem do segmento e reescrita de links (flat ou VitePress), e antes de addFrontmatter.
  • docsOutput.postProcessing.regexAdjustments Lista ordenada de { "description"?, "search", "replace" }. search é um padrão regex (string simples usa flag g, ou /pattern/flags). replace suporta placeholders como ${translatedLocale}, ${sourceLocale}, ${sourceFullPath}, ${translatedFullPath}, ${sourceFilename}, ${translatedFilename}, ${sourceBasedir}, ${translatedBasedir}.
  • docsOutput.postProcessing.languageListBlock{ "start", "end", "separator", "label"? } — regenera uma linha de link "ler em outros idiomas" delimitada em markdown de origem e traduzido. Requer languagesManifestPath (ou um manifesto em ui.flatOutputDir/ui-languages.json) para rótulos endônimos quando label: "local".

Comportamento e metadados

  • translateFrontmatterFields Mesmo nível que docsOutput (por bloco docs[]). Padrão true: traduzir prosa YAML voltada para o usuário para Starlight/Docusaurus (title, description, sidebar.label, sidebar_label, keywords, hero.title, hero.tagline, hero.image.alt, hero.actions[].text, pagination_label, prev/next). Defina false para manter todo o bloco de front matter inalterado; passe um array de strings para restringir a caminhos de ponto específicos.
  • segmentSplitting Mesmo nível que docsOutput (por bloco docs[]). Segmentos mais granulares opcionais para extração translate-docs: { "enabled", "maxCharsPerSegment"?, "splitPipeTables"?, "splitDenseParagraphs"?, "maxLinesPerParagraphChunk"?, "splitLongLists"?, "maxListItemsPerChunk"?, "qualityRetrySplit"?, "maxQualityRetrySplitDepth"? }. Quando enabled é true (padrão quando segmentSplitting é omitido), parágrafos densos, tabelas GFM (o primeiro chunk inclui cabeçalho, separador e primeira linha de dados) e listas longas são divididos; as subpartes se unem com novas linhas únicas (tightJoinPrevious). Defina "enabled": false para usar um segmento por bloco de corpo delimitado por linha em branco apenas. Quando qualityRetrySplit é true (padrão), segmentos markdown que falham na validação AST após todos os modelos serem esgotados são divididos progressivamente e tentados novamente a partir do primeiro modelo; maxQualityRetrySplitDepth (padrão 3) limita as divisões recursivas.
  • warnMarkdownSourceIssues Quando true (padrão quando omitido), cada execução de translate-docs verifica novamente os segmentos markdown em busca de delimitadores arriscados / código inline não fechado, imprime avisos no terminal e substitui as linhas markdown_source_issues para o caminho do arquivo de cache desse arquivo. Defina false para ignorar avisos e atualizações do SQLite para este bloco.
  • addFrontmatter Quando true (padrão quando omitido), os arquivos markdown traduzidos incluem as chaves YAML: translation_last_updated, source_file_mtime, source_file_hash, translation_language, source_file_path, e quando pelo menos um segmento tem metadados de modelo, translation_models (lista ordenada de IDs de modelo do provedor ativo). Defina como false para ignorar.
  • emphasisPlaceholders Por bloco docs[]. Quando true, mascara os delimitadores de ênfase do markdown como placeholders antes da tradução. O padrão é true para localidades CJK (zh, ja, ko) e para localidades listadas em rtlLocales; caso contrário, o padrão é false. Pode ser substituído via CLI --emphasis-placeholders / --no-emphasis-placeholders.
  • rtlLocales Array opcional de códigos BCP-47 tratados como RTL para padrões de placeholder de ênfase (mesclado com detecção RTL incorporada).

  • protectAttributes Opcional. Nomes adicionais de atributos JSX/HTML cujos valores entre aspas não devem ser enviados ao tradutor. Mesclados com os padrões integrados (class, id, style, src, href, type, data-*, a maioria dos aria-*, etc.). Não diferencia maiúsculas de minúsculas. Aplica-se a:

  • Extração por análise e substituição .astro (etiquetas HTML estáticas e literais de string após attr= dentro de blocos {expression}).

    • Extração de espaços reservados MDX durante a tradução de segmentos markdown/Astro (label, tooltip e aria-label em tags JSX com letras maiúsculas, além de TabItem value quando aplicável).

Exemplo: "protectAttributes": ["variant", "size"] mantém variant="primary" dentro de {items.map(...)} inalterado entre os idiomas.

Você também pode listar atributos normalmente traduzíveis (por exemplo, "title" ou "aria-label") quando desejar que esses valores sejam copiados textualmente do inglês.

  • protectKeys Opcional. Nomes adicionais de propriedades de objeto cujos valores em string entre aspas não devem ser traduzidos dentro de blocos modelo {expression} e literais de objeto MDX (por exemplo, label: dentro de <Tabs values={[ … ]}>). Mesclado com os padrões integrados (class, key, id, href, src, etc.). Não diferencia maiúsculas de minúsculas.

Exemplo: "protectKeys": ["slug", "code"] ignora { slug: 'getting-started', title: 'Getting started' } → apenas title é traduzido quando slug está protegido.


Exemplo (docsOutput.style = "flat" — caminhos de capturas de tela + invólucro opcional com lista de idiomas):

Exemplo de pós-processamento com layout plano (capturas de tela + bloco languageListBlock)
json
"docsOutput": {
  "style": "flat",
  "postProcessing": {
    "regexAdjustments": [
      {
        "description": "Per-locale screenshot folders",
        "search": "images/screenshots/[^/]+/",
        "replace": "images/screenshots/${translatedLocale}/"
      }
    ],
    "languageListBlock": {
      "start": "<small id=\"lang-list\">",
      "end": "</small>",
      "separator": " · ",
      "label": "local"
    }
  }
}

json

Matriz de nível superior de pipelines de tradução JSON aninhados. Usado apenas quando features.translateJson é verdadeiro (translate-json ou a etapa JSON de sync). Consulte JSON.

CampoDescrição
descriptionNota opcional para CLI / status (não traduzida).
contentPathsArquivos, diretórios ou globs de origem .json sob a raiz do projeto.
outputPathTemplateCaminho de saída obrigatório por localidade de destino. Substituições: {locale}, {LOCALE}, {llocale}, {stem}, {basename}, {extension}, {relativeToSourceRoot}.
targetLocalesSubconjunto opcional para este bloco; caso contrário, usa a raiz targetLocales.
keyPolicy.modeallowlist, denylist ou both.
keyPolicy.translateKeysCaminhos com ponto / padrões glob a incluir quando o modo for allowlist ou both.
keyPolicy.skipKeysCaminhos com ponto / padrões glob a excluir (a lista de negação padrão inclui id, slug, href, url, key, code).

svg

Caminhos e estrutura de nível superior para arquivos SVG. A tradução é executada apenas quando features.translateSVG é verdadeiro (via translate-svg ou o estágio SVG de sync).

CampoDescrição
sourcePathUm ou mais diretórios ou padrões glob (por exemplo, "images/*.svg", "**/icons/*.svg"). Os padrões são resolvidos em relação à raiz do projeto e escaneados recursivamente em busca de arquivos .svg.
outputDirDiretório raiz para a saída de SVG traduzido.
style"flat" ou "nested" quando pathTemplate não estiver definido.
pathTemplateCaminho de saída personalizado para SVG. Substituições: "{outputDir}", "{locale}", "{LOCALE}", "{llocale}", "{relPath}", "{stem}", "{basename}", "{extension}", "{relativeToSourceRoot}".
localePathLowercaseQuando true, os layouts integrados de SVG flat / nested usam segmentos de idioma em letras minúsculas. Valores personalizados de pathTemplate permanecem inalterados; use {llocale} para segmentos em minúsculas.
forceLowercaseTexto traduzido em letras minúsculas na remontagem SVG. Útil para designs que dependem de rótulos totalmente em letras minúsculas.

glossary

CampoDescrição
uiGlossaryCaminho para strings.json - gera automaticamente um glossário a partir das traduções existentes.
userGlossaryCaminho para um CSV com colunas Original language string (ou en), locale, Translation - uma linha por termo de origem e localidade de destino (locale pode ser * para todos os destinos).
autoAddUserEditedToGlossaryQuando true, as edições do painel para strings da UI podem ser anexadas automaticamente ao glossário do usuário.

Gere um arquivo CSV de glossário vazio:

bash
ai-i18n-tools glossary-generate

Lançado sob a licença MIT.