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 emsrc/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:
{
"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:
translationModelsLista ordenada preferencial de IDs de modelo (IDs puros do upstream, sem o prefixoprovider/; IDs do OpenRouter mantêm sua forma nativavendor/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 paratranslate-ui, geração de plurais (Etapa 0 e Passagem B) eproofread-ui. Tentada após qualquer entrada correspondente emlocaleModelspara a localidade de destino, antes detranslationModels.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 (uiModelspara UI) etranslationModels. Chaves de localidade normalizadas duplicadas são rejeitadas no carregamento da configuração.baseUrlURL base compatível com OpenAI. Substitui a URL base predefinida; obrigatório para um provedor não predefinido.apiKeyEnvVariável de ambiente que contém a chave da API. Substitui a variável de ambiente predefinida.headersCabeçalhos HTTP extras enviados com cada solicitação para este provedor.maxTokensMáximo de tokens de conclusão por solicitação. Padrão:8192.temperatureTemperatura de amostragem. Padrão:0.2.requestTimeoutMsTempo 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):
| Provedor | URL Base | Variável de ambiente da chave de API |
|---|---|---|
openrouter | https://openrouter.ai/api/v1 | OPENROUTER_API_KEY |
openai | https://api.openai.com/v1 | OPENAI_API_KEY |
anthropic | https://api.anthropic.com/v1 | ANTHROPIC_API_KEY |
gemini | https://generativelanguage.googleapis.com/v1beta/openai | GOOGLE_API_KEY |
deepseek | https://api.deepseek.com | DEEPSEEK_API_KEY |
cerebras | https://api.cerebras.ai/v1 | CEREBRAS_API_KEY |
groq | https://api.groq.com/openai/v1 | GROQ_API_KEY |
mistral | https://api.mistral.ai/v1 | MISTRAL_API_KEY |
xai | https://api.x.ai/v1 | XAI_API_KEY |
nvidia | https://integrate.api.nvidia.com/v1 | NVIDIA_API_KEY |
alibaba | https://dashscope-intl.aliyuncs.com/compatible-mode/v1 | ALIBABA_API_KEY |
apifun | https://api.apikey.fun/v1 | APIFUN_API_KEY |
ollama | http://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
"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
"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
"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
| Campo | Pipeline | Descrição |
|---|---|---|
translateUIStrings | 1 | Extrair 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). |
translateDocs | 2 | Traduzir .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". |
translateJson | 3 | JSON aninhado arbitrário sob json[] (translate-json). |
translateSVG | — | Traduzir 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 chamadast("…"). Suporta padrões comosrc/ou["src/**/*.ts"].stringsJson
Caminho para o arquivo de catálogo mestre. Atualizado porextract.flatOutputDir
Diretório onde os arquivos JSON por localidade são gravados (de.json, etc.).uiExtractor.funcNames(ou legadoreactExtractor.funcNames)
Nomes de funções adicionais para verificar (padrão:["t", "i18n.t"]).uiExtractor.extensions(ou legadoreactExtractor.extensions)
Extensões de arquivo a serem incluídas (padrão:[".js", ".jsx", ".ts", ".tsx"]). Adicione.astropara frontmatter do Astro e expressões de template.uiExtractor.includePackageDescription(ou legadoreactExtractor.includePackageDescription)
Quandotrue(padrão),extracttambém incluipackage.jsondescriptioncomo uma string de UI quando presente.uiExtractor.packageJsonPath(ou legadoreactExtractor.packageJsonPath)
Caminho personalizado para o arquivopackage.jsonusado para essa extração de descrição opcional.uiExtractor.includeUiLanguageEnglishNames(ou legadoreactExtractor.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
cacheDirDiretório de cache SQLite (compartilhado por todos os blocosdocs). 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 —cacheDircria 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
.gitignoreou.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 usaai-i18n-tools. - Exclua arquivos temporários e de log para evitar o commit de arquivos de backup e depuração.
Exemplo:
# Translation cache directory
.translation-cache/*
# Keep SQLite cache for reuse
!.translation-cache/cache.db
# Temporary and log files
*.tmp
*.logdocs
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 legada | Chave/comportamento atual |
|---|---|
documentations | docs |
markdownOutput | docs[].docsOutput |
jsonSource | docs[].docusaurusCatalogDir |
openrouter de nível superior | providers.openrouter + provider: "openrouter" |
features.translateMarkdown | features.translateDocs |
features.translateJSON | removido (use docs[].docusaurusCatalogDir ou json[]) |
features.extractUIStrings | removido (extract é executado antes da tradução da interface do usuário) |
glossary.uiGlossaryFromStringsJson | glossary.uiGlossary |
ui.reactExtractor | ui.uiExtractor (alias ainda aceito) |
svg.svgExtractor.forceLowercase | svg.forceLowercase |
Fontes de conteúdo
descriptionNota opcional legível por humanos para este bloco (não usada para tradução). É prefixada no título dotranslate-docs🌐quando definida; também exibida nos cabeçalhos das seçõesstatus.contentPathsCorpos de páginas em Markdown/MDX e modelos.astroa serem traduzidos (translate-docsexamina estes por.md,.mdxe.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.sourceFilesAlias opcional mesclado emcontentPathsno carregamento.targetLocalesSubconjunto opcional de localidades apenas para este bloco (caso contrário, usa atargetLocalesraiz). As localidades efetivas de documentação são a união entre todos os blocos.docusaurusCatalogDirOpcional. Diretório de origem para catálogos de rótulos JSON do Docusaurus para este bloco (por exemplo,"i18n/en"dedocusaurus write-translations). Os corpos das páginas sempre vêm decontentPaths;docusaurusCatalogDirapenas fornece JSON de shell/UI, não MDX.nextraMetaGlobGlob(s) opcionais para_meta.ts/_meta.tsx/_meta.jsdo Nextra emdocsRoot. QuandodocsOutput.styleé"nextra"e isso é omitido, todos os arquivos_metaemdocsRootsão coletados automaticamente.nextraMetaTranslatableKeysNomes de propriedades opcionais cujos valores de string são traduzidos em objetos_metado Nextra (padrão:title,display,breadcrumb).nextraDictionaryPathMódulo de dicionário de tema Nextra em inglês opcional (por exemplo,"app/_dictionaries/en.ts"). Traduzido para{dir}/{locale}.tsdurantetranslate-docs.nextraDictionaryOutputTemplateModelo de saída opcional para módulos de dicionário de localidade (padrão:{dir}/{locale}.tsem relação ao diretório do dicionário).
Layout de saída
outputDirDiretó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.localeSubpathSegmento de caminho entre{locale}/e{relativeToDocsRoot}paradoc-system(obrigatório ao usarstyle: "doc-system"diretamente; predefinido ao usar um alias). Use""para pastas de localidade no estilo Starlight.docsOutput.docsRootRaiz dos documentos de origem para o layout do Docusaurus (por exemplo,"docs"). Padrão"docs"quando omitido.docsOutput.pathTemplateCaminho de saída de markdown personalizado. Espaços reservados:"{outputDir}","{locale}","{LOCALE}","{llocale}","{relPath}","{stem}","{basename}","{extension}","{docsRoot}","{relativeToDocsRoot}".docsOutput.jsonPathTemplateCaminho de saída JSON personalizado para arquivos de rótulo. Suporta os mesmos espaços reservados quepathTemplate.docsOutput.localePathLowercaseQuandotrue, layouts de saída integrados (nested,flat,doc-systemsempathTemplate) usam segmentos de localidade em minúsculas nos caminhos. Padrãofalse;astro-starlightedoc-systemcomlocaleSubpathvazio padronizam paratrueno carregamento da configuração.docsOutput.flatPreserveRelativeDirQuandodocsOutput.style = "flat", mantenha os subdiretórios de origem para que arquivos com o mesmo nome base não colidam. Padrãofalse.docsOutput.rewriteRelativeLinksReescreve links relativos após a tradução (ativado automaticamente quandodocsOutput.style = "flat"e sempathTemplatepersonalizado).docsOutput.linkRewriteDocsRootRaiz 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.rewriteVitepressLinksQuandotrue, executa o normalizador de link do VitePress após a tradução. O padrão é ativado quandodocsOutput.styleé"vitepress". Use com qualquer layoutdoc-systemonde as pastas de localidade ficam ao lado do inglês emdocsRoot. Reescreve caminhosdocs/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.rewriteNextraLinksQuandotrue, executa o normalizador de link do Nextra após a tradução. O padrão é ativado quandodocsOutput.styleé"nextra". Reescrevecontent/en/…e caminhos.mdxrelativos para rotas de site neutras em relação à localidade (/guide/…) para Next.jsi18n. Consulte Integração Nextra — Convenções de link.docsOutput.fumadocsParser"dot"(padrão) ou"dir". Dot escrevestem.{locale}.mdxao lado das fontes em inglês; dir escreve pastas de localidade como Nextra. Consulte Integração Fumadocs — Layout da página.docsOutput.rewriteFumadocsLinksQuandotrue, executa o normalizador de link do Fumadocs após a tradução. O padrão é ativado quandodocsOutput.styleé"fumadocs". Reescreve caminhos de conteúdo e links.mdxrelativos para rotas/docs/….docsOutput.fumadocsUiCatalogOpcional. Catálogo de substituição da interface do usuário do Fumadocs + tradução dentro detranslate-docs. Campos:sourcePath(por exemplo,lib/layout.shared.ts),catalogPath(JSON em inglês gerado),outputPathTemplateopcional (padrão:ui.{locale}.jsonao lado decatalogPath).docs[].fumadocsMetaGlobGlob(s) opcionais para coletameta.jsonquandodocsOutput.styleé"fumadocs". Padrão:meta.jsonrecursivo emdocsOutput.docsRoot.docs[].fumadocsMetaTranslatableKeysNomes de propriedades cujos valores de string são traduzidos nosmeta.jsondo Fumadocs (padrão:title,description).docsOutput.vitepressThemeCatalogOpcional. Catálogo de bootstrap e tradução do tema/nav/barra lateral do VitePress dentro detranslate-docs. Campos:configPath(configuração do VitePress com strings de tema),catalogPath(JSON em inglês aninhado gerado), opcionaloutputPathTemplate(padrão:theme.{locale}.jsonao lado decatalogPath).
Pós-processamento
docsOutput.postProcessingTransformaçõ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 deaddFrontmatter.docsOutput.postProcessing.regexAdjustmentsLista ordenada de{ "description"?, "search", "replace" }.searché um padrão regex (string simples usa flagg, ou/pattern/flags).replacesuporta 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. RequerlanguagesManifestPath(ou um manifesto emui.flatOutputDir/ui-languages.json) para rótulos endônimos quandolabel: "local".
Comportamento e metadados
translateFrontmatterFieldsMesmo nível quedocsOutput(por blocodocs[]). Padrãotrue: 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). Definafalsepara manter todo o bloco de front matter inalterado; passe um array de strings para restringir a caminhos de ponto específicos.segmentSplittingMesmo nível quedocsOutput(por blocodocs[]). Segmentos mais granulares opcionais para extraçãotranslate-docs:{ "enabled", "maxCharsPerSegment"?, "splitPipeTables"?, "splitDenseParagraphs"?, "maxLinesPerParagraphChunk"?, "splitLongLists"?, "maxListItemsPerChunk"?, "qualityRetrySplit"?, "maxQualityRetrySplitDepth"? }. Quandoenabledétrue(padrão quandosegmentSplittingé 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": falsepara usar um segmento por bloco de corpo delimitado por linha em branco apenas. QuandoqualityRetrySplité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ão3) limita as divisões recursivas.warnMarkdownSourceIssuesQuandotrue(padrão quando omitido), cada execução detranslate-docsverifica novamente os segmentos markdown em busca de delimitadores arriscados / código inline não fechado, imprime avisos no terminal e substitui as linhasmarkdown_source_issuespara o caminho do arquivo de cache desse arquivo. Definafalsepara ignorar avisos e atualizações do SQLite para este bloco.addFrontmatterQuandotrue(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 comofalsepara ignorar.emphasisPlaceholdersPor blocodocs[]. Quandotrue, mascara os delimitadores de ênfase do markdown como placeholders antes da tradução. O padrão étruepara localidades CJK (zh,ja,ko) e para localidades listadas emrtlLocales; caso contrário, o padrão éfalse. Pode ser substituído via CLI--emphasis-placeholders/--no-emphasis-placeholders.rtlLocalesArray opcional de códigos BCP-47 tratados como RTL para padrões de placeholder de ênfase (mesclado com detecção RTL incorporada).
protectAttributesOpcional. 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 dosaria-*, 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ósattr=dentro de blocos{expression}).- Extração de espaços reservados MDX durante a tradução de segmentos markdown/Astro (
label,tooltipearia-labelem tags JSX com letras maiúsculas, além deTabItemvaluequando aplicável).
- Extração de espaços reservados MDX durante a tradução de segmentos markdown/Astro (
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.
protectKeysOpcional. 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)
"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.
| Campo | Descrição |
|---|---|
description | Nota opcional para CLI / status (não traduzida). |
contentPaths | Arquivos, diretórios ou globs de origem .json sob a raiz do projeto. |
outputPathTemplate | Caminho de saída obrigatório por localidade de destino. Substituições: {locale}, {LOCALE}, {llocale}, {stem}, {basename}, {extension}, {relativeToSourceRoot}. |
targetLocales | Subconjunto opcional para este bloco; caso contrário, usa a raiz targetLocales. |
keyPolicy.mode | allowlist, denylist ou both. |
keyPolicy.translateKeys | Caminhos com ponto / padrões glob a incluir quando o modo for allowlist ou both. |
keyPolicy.skipKeys | Caminhos 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).
| Campo | Descrição |
|---|---|
sourcePath | Um 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. |
outputDir | Diretório raiz para a saída de SVG traduzido. |
style | "flat" ou "nested" quando pathTemplate não estiver definido. |
pathTemplate | Caminho de saída personalizado para SVG. Substituições: "{outputDir}", "{locale}", "{LOCALE}", "{llocale}", "{relPath}", "{stem}", "{basename}", "{extension}", "{relativeToSourceRoot}". |
localePathLowercase | Quando 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. |
forceLowercase | Texto traduzido em letras minúsculas na remontagem SVG. Útil para designs que dependem de rótulos totalmente em letras minúsculas. |
glossary
| Campo | Descrição |
|---|---|
uiGlossary | Caminho para strings.json - gera automaticamente um glossário a partir das traduções existentes. |
userGlossary | Caminho 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). |
autoAddUserEditedToGlossary | Quando 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:
ai-i18n-tools glossary-generate