設定參考
sourceLocale
源语言的 BCP-47 代码(例如 "en-GB"、"en"、"pt-BR")。不会为该区域设置生成翻译文件——键字符串本身就是源文本。
必须匹配从您的运行时 i18n 设置文件(SOURCE_LOCALE / src/i18n.ts)导出的 src/i18n.js。
targetLocales
要翻译到的 BCP-47 区域设置代码数组(例如 ["de", "fr", "es", "pt-BR"])。
targetLocales 是 UI 翻译的主要区域设置列表,也是文档块的默认区域设置列表。使用 generate-ui-languages 从 ui-languages.json + sourceLocale 构建 targetLocales manifest。
uiLanguage (選用)
工具自身介面語言(CLI 說明、日誌/摘要,以及翻譯儀表板)的 BCP-47 代碼。它獨立於 sourceLocale / targetLocales,並會被 -L / --ui-lang 旗標與 AI_I18N_LANG 環境變數覆寫。未知值會優雅降級為來源地區設定(en-GB)——沒有嚴格的驗證。請參閱工具介面語言。
languagesManifestPath(選用)
根層級選用字串(未巢狀於 ui 之下)。extract 與 generate-ui-languages 寫入 ui-languages.json 資訊清單的路徑,CLI 亦從此路徑讀取以取得顯示名稱及進行語言列表後處理。省略時,預設為 ui.flatOutputDir/ui-languages.json,於設定載入時生效。
在以下情况下使用此选项:
- 資訊清單應置於
ui.flatOutputDir之外(例如放在src/i18n/下的應用程式輔助程式旁)。 - 您希望語言切換器後處理(
languageListBlock)從專案資訊清單建構地區標籤,而非僅使用內建的主目錄。
includeUiLanguageEnglishNames 不會讀取此檔案——它使用內建的主目錄(詳見下文 ui.uiExtractor)。
舊版: 載入設定檔時仍接受根層級的 uiLanguagesPath,並自動改寫為 languagesManifestPath。
concurrency(可选)
同时翻译的最大目标区域设置(translate-ui、translate-docs、translate-svg 以及 sync 中的匹配步骤)。如果省略,CLI 会为 UI 翻译使用4,为文档翻译使用3(内置默认值)。可以通过 -j / --concurrency 为每次运行覆盖。
batchConcurrency(可选)
translate-docs、translate-svg 和 translate-json(以及 sync 內的匹配步驟):每個檔案的最大平行 LLM 批次請求數(每個批次可包含許多區段)。省略時預設為 4。translate-ui 會忽略。使用 -b / --batch-concurrency 覆寫。
fileConcurrency(選填)
在單一地區內,於 translate-docs 和 sync 期間可同時處理的檔案數目。當設定為大於 1 的值時,同一地區內的檔案會使用訊號量(semaphore)來控制記憶體使用量,並以平行方式處理。預設值為 1(循序處理),若省略則使用預設值。較高的值可顯著提高 I/O 繫結操作的輸送量,特別是當所有區段都已快取(無需 API 呼叫)時。
範例:
{
"fileConcurrency": 4
}使用案例: 執行 sync --force-update 時,將此設定為 2-4,以達到 100% 快取命中率,從而減少總處理時間。此改善對於處理大量小型檔案時最為顯著。
batchSize / maxBatchChars(選填)
translate-docs、translate-svg 和 translate-json 的區段批次處理:每個 API 請求的區段數和字元上限。預設值:20 個區段,4096 個字元(省略時)。
provider 和 providers
provider(頂層,選填)從 providers 中選取作用中的提供者金鑰。當僅設定一個提供者時為選填;當設定多個提供者時為必要。
providers(頂層)將提供者金鑰對應至其區塊。內建金鑰(請參閱下方的預設表格)僅需要 translationModels;任何其他金鑰都定義了一個自訂的 OpenAI 相容端點,並需要 baseUrl(以及 apiKeyEnv,除非該端點不需要金鑰)。
每個 providers.<name> 區塊接受:
translationModels模型 ID 的首選有序列表(純上游 ID,無provider/前綴;OpenRouter ID 保留其原生vendor/model形式)。第一個優先嘗試;後續條目在出錯時作為備用。這是每個管道的全局預設鏈,當沒有更具體的層級適用時。uiModels(可選) 用於translate-ui、複數生成(步驟 0 和階段 B)和proofread-ui的僅限 UI 的有序模型列表。在目標語言環境的任何匹配localeModels條目之後,translationModels之前嘗試。localeModels(可選) 所有翻譯管道的每個語言環境覆寫。{ "locale": "<BCP-47>", "models": ["…"] }物件陣列。語言環境標籤不區分大小寫匹配(pt-br=pt-BR)。每個語言環境的列表僅針對該語言環境優先嘗試,然後是管道特定的層級(UI 為uiModels)和translationModels。在配置載入時拒絕重複的標準化語言環境鍵。baseUrl與 OpenAI 相容的基礎 URL。覆寫預設的基礎 URL;非預設提供者需要此項。apiKeyEnv儲存 API 金鑰的環境變數。覆寫預設的環境變數。headers每次向此提供者發送請求時傳送的額外 HTTP 標頭。maxTokens每個請求的最大完成權杖數。預設值:8192。temperature取樣溫度。預設值:0.2。requestTimeoutMs等待每個請求的最長時間(毫秒)。預設值:30000(30 秒)。
內建提供者預設值(金鑰 — 基本 URL — API 金鑰環境變數):
| 提供者 | 基本 URL | 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 | (無) |
仍然接受舊式的頂層 openrouter 區塊(包含 baseUrl、translationModels、defaultModel、fallbackModel、maxTokens、temperature、requestTimeoutMs),並在載入時自動遷移至 providers.openrouter(包含 provider: "openrouter");defaultModel / fallbackModel 會合併到 translationModels 中。
如需在一個設定中設定多個提供者並使用 -P 在它們之間切換的可執行範例,請參閱 examples/multi-provider(openai、anthropic、nvidia 和 deepseek 在同一文件中)。
為何使用多個模型: 不同的提供者和模型在成本和品質上有所差異,且在不同語言和地區的表現也不同。將 translationModels 設定為有序的備用鏈(而非單一模型),以便在請求失敗時,CLI 可以嘗試下一個模型。
將以下列表視為您可以擴展的基準:如果特定語言環境的翻譯品質不佳或不成功,請研究哪些模型能有效支援該語言或文字(參考線上資源或您的提供者文件),並將這些模型 ID 添加為進一步的替代方案。
這些模型 ID 在 -P openrouter(預設值)時符合 ai-i18n-tools init [-P <provider>]。其他預設集從 init -P <provider> 取得原生模型 ID——請參閱內建提供者。
此列表經過測試,涵蓋了廣泛的地區,適用於一個包含 36 個目標地區的大型文件專案;它是一個實用的預設值,但不能保證對每個地區都有良好的表現。
範例 translationModels(與 ai-i18n-tools init [-P <provider>] 相同的預設值):
預設翻譯模型備用列表
"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: UI 字串簡短但顯眼——高階模型通常能改善語氣、複數形式與一致性。選用的 uiModels 會在任何相符的 localeModels 項目之後、translationModels 之前嘗試(請參閱上方的欄位列表)。範例:
用於 UI 翻譯的建議 uiModels
"uiModels": [
"~anthropic/claude-sonnet-latest",
"z-ai/glm-5.2"
]亞洲語言的建議 localeModels: 日文、韓文與中文地區通常受益於針對這些文字調整過的模型。新增按地區的覆寫設定,當目標地區相符時,會優先嘗試(在 uiModels / translationModels 之前):
用於 ja、ko、zh-Hans、zh-Hant 的建議 localeModels
"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" ] }
]在您的環境或 .env 檔案中設定作用中提供者的 API 金鑰環境變數(請參閱預設集表格)。
在變更模型清單之前,執行 ai-i18n-tools check-models。對於任何提供者,它會根據該提供者的即時模型清單 (GET /models) 驗證每個已設定的模型 ID(translationModels、uiModels 及所有 localeModels 項目),回報缺失或已過時的 ID (expiration_date),列出有效模型,並在任一已設定的 ID 無效時以非零值結束。當提供者傳回定價(例如 OpenRouter)時,它也會顯示預估的輸入/輸出定價(每百萬權杖的美元計價)。
若要比較真實翻譯工作中的已設定模型,執行 ai-i18n-tools bench-models。它會對 translationModels、uiModels 和 localeModels 中的每個唯一模型 ID 進行基準測試,方式是隔離翻譯一個範例(平行執行,受限於 concurrency),並輸出每模型的輸入/輸出權杖數、牆上時鐘時間和美元成本,讓您在決定模型清單前能權衡速度與價格。
features
| 欄位 | 管道 | 說明 |
|---|---|---|
translateUIStrings | 1 | 將 t("…") / i18n.t("…") 提取到 strings.json 中,然後翻譯條目並寫入每個地區設定的平面 JSON(提取自動執行;使用獨立的 extract 僅重新整理目錄)。 |
translateDocs | 2 | 翻譯 .md / .mdx / .astro 頁面;設定 docs[].docusaurusCatalogDir 時的 Docusaurus shell JSON;設定時的 Nextra _meta / 字典;設定 docsOutput.vitepressThemeCatalog 時的 VitePress 主題;當 docsOutput.style 為 "fumadocs" 時的 Fumadocs meta.json / UI 目錄。 |
translateJson | 3 | json[](translate-json)下的任意巢狀 JSON。 |
translateSVG | — | 翻譯 .svg 檔案(需要頂層的 svg 區塊)。 |
翻譯 SVG 檔案,當 features.translateSVG 為 true 且設定了頂層 svg 區塊時,使用 translate-svg。sync 命令會在兩者都設定時執行該步驟(除非設定了 --no-svg)。
ui
sourceRoots
掃描t("…")呼叫的目錄或全域模式(相對於目前工作目錄)。支援src/或["src/**/*.ts"]等模式。stringsJson
主目錄檔案的路徑。由extract更新。flatOutputDir
寫入每個語言環境 JSON 檔案的目錄(de.json等)。uiExtractor.funcNames(或舊版reactExtractor.funcNames)
要掃描的其他函數名稱(預設值:["t", "i18n.t"])。uiExtractor.extensions(或舊版reactExtractor.extensions)
要包含的檔案副檔名(預設值:[".js", ".jsx", ".ts", ".tsx"])。為 Astro 前置內容和模板表達式新增.astro。uiExtractor.includePackageDescription(或舊版reactExtractor.includePackageDescription)
當true(預設)時,extract也會將package.jsondescription作為 UI 字串包含在內(如果存在)。uiExtractor.packageJsonPath(或舊版reactExtractor.packageJsonPath)
用於該可選描述提取的package.json檔案的自訂路徑。uiExtractor.includeUiLanguageEnglishNames(或舊版reactExtractor.includeUiLanguageEnglishNames)
當 true(預設 false)時,extract 亦會將內建 ui-languages 主目錄(由 sourceLocale + targetLocales 建構)中的每個 englishName 加入 strings.json,前提是來源掃描中尚未存在該項(使用相同雜湊鍵)。不會讀取 languagesManifestPath。
cacheDir
cacheDirSQLite 快取目錄(所有docs區塊共用)。預設.translation-cache。跨執行重複使用。如果您正在從自訂文件翻譯快取遷移,請封存或刪除它 —cacheDir會建立自己的 SQLite 資料庫,並且與其他架構不相容。
git 排除的最佳實踐:
- 排除翻譯快取資料夾的內容(例如,使用
.gitignore或.git/info/exclude),以防止提交臨時快取偽影。 - 保留
cache.db(不要例行刪除它),因為保留 SQLite 快取可以防止重新翻譯未變更的區段。這在更新或修改使用ai-i18n-tools的軟體時,可以節省執行時間和 API 成本。 - 排除臨時檔案和日誌檔案,以避免提交備份和除錯相關檔案。
範例:
# Translation cache directory
.translation-cache/*
# Keep SQLite cache for reuse
!.translation-cache/cache.db
# Temporary and log files
*.tmp
*.logdocs
文件管線區塊陣列。translate-docs 和 sync 的文件階段會依序處理每個區塊。舊版金鑰在載入時仍可接受,並在設定檔可寫入時重新寫入;在新設定中請優先使用目前的名稱。
| 舊版金鑰 | 目前金鑰 / 行為 |
|---|---|
documentations | docs |
markdownOutput | docs[].docsOutput |
jsonSource | docs[].docusaurusCatalogDir |
頂層 openrouter | providers.openrouter + provider: "openrouter" |
features.translateMarkdown | features.translateDocs |
features.translateJSON | 已移除(使用 docs[].docusaurusCatalogDir 或 json[]) |
features.extractUIStrings | 已移除(extract 在 UI 翻譯之前執行) |
glossary.uiGlossaryFromStringsJson | glossary.uiGlossary |
ui.reactExtractor | ui.uiExtractor(別名仍可接受) |
svg.svgExtractor.forceLowercase | svg.forceLowercase |
內容來源
description此區塊的可選人類可讀註記 (不適用於翻譯)。若已設定,則會加上前綴顯示於translate-docs🌐標題;也會顯示於status區段標題。contentPaths要翻譯的 Markdown/MDX 頁面內文和.astro範本 (translate-docs會掃描這些以尋找.md、.mdx和.astro)。支援 目錄路徑或 glob 模式 (例如"docs/**/*.md"、"guides/*.mdx"、"src/pages/index.astro")。這就是本地化文件內文的來源。sourceFiles載入時合併到contentPaths的可選別名。targetLocales此區塊的可選地區設定子集 (否則使用根目錄targetLocales)。有效的地區設定是跨區塊的聯集。docusaurusCatalogDir選用。此區塊的 Docusaurus JSON 標籤目錄來源目錄(例如來自docusaurus write-translations的"i18n/en")。頁面內容一律來自contentPaths;docusaurusCatalogDir僅提供殼層/UI JSON,不提供 MDX。nextraMetaGlob選用的萬用字元(glob),用於docsRoot下的 Nextra_meta.ts/_meta.tsx/_meta.js。當docsOutput.style為"nextra"且省略此項時,docsRoot下的所有_meta檔案會自動收集。nextraMetaTranslatableKeys選用的屬性名稱,其字串值會在 Nextra_meta物件中翻譯(預設:title、display、breadcrumb)。nextraDictionaryPath選用的英文 Nextra 主題字典模組(例如"app/_dictionaries/en.ts")。在translate-docs期間翻譯為{dir}/{locale}.ts。nextraDictionaryOutputTemplate選用的地區字典模組輸出地區字典模組輸出範本(預設:相對於字典目錄的{dir}/{locale}.ts)。
輸出佈局
outputDir此區塊翻譯輸出的根目錄。docsOutput.style"nested"(預設)、"flat"、"doc-system",或別名"docusaurus"/"astro-starlight"/"vitepress"/"nextra"。docsOutput.localeSubpath{locale}/與{relativeToDocsRoot}之間用於doc-system的路徑區段(直接使用style: "doc-system"時為必填;使用別名時為預設值)。使用""處理 Starlight 風格的地區資料夾。docsOutput.docsRootDocusaurus 版面配置的來源文件根目錄(例如"docs")。省略時預設為"docs"。docsOutput.pathTemplate自訂 Markdown 輸出路徑。佔位符:"{outputDir}"、"{locale}"、"{LOCALE}"、"{llocale}"、"{relPath}"、"{stem}"、"{basename}"、"{extension}"、"{docsRoot}"、"{relativeToDocsRoot}"。docsOutput.jsonPathTemplate標籤檔案的自訂 JSON 輸出路徑。支援與pathTemplate相同的佔位符。docsOutput.localePathLowercase當true時,內建輸出佈局(nested、flat、doc-system不含pathTemplate)在路徑中使用小寫語言環境區段。預設false;astro-starlight和doc-system在設定載入時,若localeSubpath為空,則預設為true。docsOutput.flatPreserveRelativeDir當docsOutput.style = "flat"時,保留來源子目錄,以便具有相同基本名稱的檔案不會衝突。預設false。docsOutput.rewriteRelativeLinks翻譯後重寫相對連結(當docsOutput.style = "flat"且無自訂pathTemplate時自動啟用)。docsOutput.linkRewriteDocsRoot計算扁平連結重寫前綴時使用的儲存庫根目錄。除非您的翻譯文件位於不同的專案根目錄下,否則通常保持為"."。docsOutput.rewriteVitepressLinks當true時,在翻譯後執行 VitePress 連結正規化工具。當docsOutput.style為"vitepress"時預設為啟用。與任何將語系資料夾置於英文旁的docsRoot下的doc-system佈局搭配使用。將 README 風格的docs/guide/…路徑重寫為網站路由 (/guide/…) 和語系相對的../guide/…連結。對於指向 VitePress 樹狀結構外儲存庫檔案的連結 (LICENSE,examples/),請在英文原始碼中使用完整 URL — 請參閱 VitePress 整合 — 以 README 作為文件首頁。docsOutput.rewriteNextraLinks當true時,在翻譯後執行 Nextra 連結正規化工具。當docsOutput.style為"nextra"時預設為啟用。為 Next.jsi18n將content/en/…和相對.mdx路徑重寫為語系中立的網站路由 (/guide/…)。請參閱 Nextra 整合 — 連結慣例。docsOutput.fumadocsParser"dot"(預設) 或"dir"。Dot 會將stem.{locale}.mdx寫在英文原始碼旁;dir 會寫入類似 Nextra 的語系資料夾。請參閱 Fumadocs 整合 — 頁面佈局。docsOutput.rewriteFumadocsLinks當true時,在翻譯後執行 Fumadocs 連結正規化工具。當docsOutput.style為"fumadocs"時預設為啟用。將內容路徑和相對.mdx連結重寫為/docs/…路由。docsOutput.fumadocsUiCatalog選用。在translate-docs內進行 Fumadocs UI 覆寫目錄啟動程序 + 翻譯。欄位:sourcePath(例如lib/layout.shared.ts)、catalogPath(生成的英文 JSON)、選用的outputPathTemplate(預設:ui.{locale}.json位於catalogPath旁)。docs[].fumadocsMetaGlob當docsOutput.style為"fumadocs"時,用於meta.json集合的選用 glob。預設:在docsOutput.docsRoot下遞迴meta.json。docs[].fumadocsMetaTranslatableKeys在 Fumadocsmeta.json中其字串值被翻譯的屬性名稱(預設:title、description)。docsOutput.vitepressThemeCatalog選填。在translate-docs內的 VitePress 主題/導覽/側邊欄目錄啟動程序 + 翻譯。欄位:configPath(帶有主題字串的 VitePress 設定)、catalogPath(生成的英文巢狀 JSON)、選填的outputPathTemplate(預設:在catalogPath旁的theme.{locale}.json)。
後處理
docsOutput.postProcessing對已翻譯的markdown 內文進行選用轉換(YAML 鍵與非散文式 front matter 值會保留)。於段落重組與連結改寫(平面或 VitePress)之後、addFrontmatter之前執行。docsOutput.postProcessing.regexAdjustments{ "description"?, "search", "replace" }的有序列表。search為正規表示式模式(純字串使用旗標g,或/pattern/flags)。replace支援預留位置,例如${translatedLocale}、${sourceLocale}、${sourceFullPath}、${translatedFullPath}、${sourceFilename}、${translatedFilename}、${sourceBasedir}、${translatedBasedir}。docsOutput.postProcessing.languageListBlock{ "start", "end", "separator", "label"? }—— 在來源與已翻譯的 markdown 中重新產生有界的「以其他語言閱讀」連結列。當label: "local"時,需要languagesManifestPath(或位於ui.flatOutputDir/ui-languages.json的資訊清單)以提供內名標籤。
行為與中繼資料
translateFrontmatterFields與docsOutput位於同一層級(每個docs[]區塊)。預設true:翻譯 Starlight/Docusaurus 的使用者介面 YAML 散文(title、description、sidebar.label、sidebar_label、keywords、hero.title、hero.tagline、hero.image.alt、hero.actions[].text、pagination_label、prev/next標籤)。設定false以保持整個前置內容區塊不變;傳遞字串陣列以限制為特定的點路徑。segmentSplitting與docsOutput位於同一層級(每個docs[]區塊)。用於translate-docs提取的可選更細粒度區段:{ "enabled", "maxCharsPerSegment"?, "splitPipeTables"?, "splitDenseParagraphs"?, "maxLinesPerParagraphChunk"?, "splitLongLists"?, "maxListItemsPerChunk"?, "qualityRetrySplit"?, "maxQualityRetrySplitDepth"? }。當enabled為true時(當省略segmentSplitting時為預設值),會分割密集段落、GFM 管道表格(第一個區塊包含標頭、分隔符和第一個資料行)和長列表;子部分會以單個換行符重新連接(tightJoinPrevious)。設定"enabled": false以僅使用每個以空白行分隔的主體區塊作為一個區段。當qualityRetrySplit為true時(預設值),在所有模型都用盡後,未能通過 AST 驗證的 markdown 區段會逐步分割並從第一個模型重試;maxQualityRetrySplitDepth(預設3)限制遞迴分割。warnMarkdownSourceIssues當true時(省略時為預設值),每次translate-docs執行都會重新掃描 markdown 區段以查找危險分隔符/未閉合的行內程式碼,列印終端警告,並替換該檔案快取路徑的markdown_source_issues行。設定false以跳過此區塊的警告和 SQLite 更新。addFrontmatter當true時(省略時為預設值),翻譯後的 markdown 檔案包含 YAML 鍵:translation_last_updated、source_file_mtime、source_file_hash、translation_language、source_file_path,並且當至少一個區段具有模型中繼資料時,translation_models(來自活動提供者的模型 ID 排序列表)。設定為false以跳過。emphasisPlaceholders每個docs[]區塊。當true時,在翻譯前將 markdown 強調分隔符遮罩為佔位符。對於 CJK 語言環境(zh、ja、ko)和rtlLocales中列出的語言環境,預設為true;否則預設為false。可透過 CLI--emphasis-placeholders/--no-emphasis-placeholders覆寫。rtlLocalesBCP-47 代碼的可選陣列,被視為 RTL 以用於強調佔位符預設值(與內建 RTL 偵測合併)。
protectAttributes可選。額外的 JSX/HTML 屬性名稱,其 引用的字串值不得發送給翻譯器。與內建預設值合併(class、id、style、src、href、type、data-*、大多數aria-*等)。不區分大小寫。適用於:.astro的解析替換提取(靜態 HTML 標籤和attr=後的字串文字,位於{expression}區塊內)。- Markdown/Astro 區段翻譯期間的 MDX 佔位符提取(
label、tooltip和大寫 JSX 標籤上的aria-label,以及適用的TabItemvalue)。
- Markdown/Astro 區段翻譯期間的 MDX 佔位符提取(
範例:"protectAttributes": ["variant", "size"] 在不同地區設定下保持 variant="primary" 在 {items.map(...)} 中不變。
您也可以列出正常翻譯的屬性(例如 "title" 或 "aria-label"),當您希望這些值從英文逐字複製時。
protectKeys可選。額外的 物件屬性名稱,其引用的字串值在模板{expression}區塊和 MDX 物件文字(例如label:在<Tabs values={[ … ]}>中)內不得翻譯。與內建預設值合併(class、key、id、href、src等)。不區分大小寫。
範例:"protectKeys": ["slug", "code"] 跳過 { slug: 'getting-started', title: 'Getting started' } → 當 slug 被保護時,只有 title 會被翻譯。
範例(docsOutput.style = "flat" — 螢幕截圖路徑 + 可選語言列表包裝器):
平面佈局後處理範例(螢幕截圖 + 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
巢狀 JSON 翻譯管道的頂層陣列。僅在 features.translateJson 為 true 時使用(translate-json 或 sync 的 JSON 階段)。請參閱 JSON。
| 欄位 | 描述 |
|---|---|
description | CLI / status 的可選註釋(不翻譯)。 |
contentPaths | 專案根目錄下的來源 .json 檔案、目錄或 glob 模式。 |
outputPathTemplate | 每個目標地區設定必需的輸出路徑。佔位符:{locale}、{LOCALE}、{llocale}、{stem}、{basename}、{extension}、{relativeToSourceRoot}。 |
targetLocales | 此區塊的可選子集;否則為根目錄的 targetLocales。 |
keyPolicy.mode | allowlist、denylist 或 both。 |
keyPolicy.translateKeys | 模式為 allowlist 或 both 時要包含的點路徑 / glob 模式。 |
keyPolicy.skipKeys | 要排除的點路徑 / glob 模式(預設拒絕列表包含 id、slug、href、url、key、code)。 |
svg
SVG 檔案的頂層路徑和佈局。僅當 features.translateSVG 為 true 時(透過 translate-svg 或 sync 的 SVG 階段)執行翻譯。
| 欄位 | 說明 |
|---|---|
sourcePath | 一個或多個目錄 或 glob 模式(例如 "images/*.svg"、"**/icons/*.svg")。模式相對於專案根目錄解析,並遞迴掃描以尋找 .svg 檔案。 |
outputDir | 已翻譯 SVG 輸出的根目錄。 |
style | 當 pathTemplate 未設定時為 "flat" 或 "nested"。 |
pathTemplate | 自訂 SVG 輸出路徑。佔位符:"{outputDir}"、"{locale}"、"{LOCALE}"、"{llocale}"、"{relPath}"、"{stem}"、"{basename}"、"{extension}"、"{relativeToSourceRoot}"。 |
localePathLowercase | 當 true 為 true 時,內建的 flat / nested SVG 佈局會使用小寫的地區設定區段。自訂 pathTemplate 值保持不變;請使用 {llocale} 來進行小寫區段。 |
forceLowercase | 在重新組合 SVG 時將翻譯後的文字轉為小寫。對於依賴全小寫標籤的設計很有用。 |
glossary
| 欄位 | 說明 |
|---|---|
uiGlossary | 指向 strings.json 的路徑 - 會從現有翻譯自動建構詞彙表。 |
userGlossary | 指向 CSV 檔案的路徑,其中包含 Original language string(或 en)、locale、Translation 等欄位 - 每行代表一個來源術語和目標地區設定(locale 可以是 * 以代表所有目標地區設定)。 |
autoAddUserEditedToGlossary | 當 true 時,對 UI 字串的儀表板編輯可以自動附加到使用者詞彙表中。 |
產生一個空的詞彙表 CSV:
ai-i18n-tools glossary-generate