語種版本)
JSON多語言翻譯工具jsontt一條命令讓英文語言包生成4個(gè)語種版本【免費(fèi)下載鏈接】json-translatorjsontt - AI JSON Translator with GPT / Gemma / Mixtral / llama other FREE translation modules to translate your json/yaml files into other languages ? Check Readme ? Supports GPT / Gemma / Mixtral / llama / DeepL / Google / Bing / Libre / Argos項(xiàng)目地址: https://gitcode.com/gh_mirrors/js/json-translator上線前夜產(chǎn)品經(jīng)理丟來一句今晚8點(diǎn)前i18n語言包要把日語、法語、德語、中文簡(jiǎn)體都補(bǔ)齊。你打開en.json看著里面四百多行文案腦子里浮現(xiàn)的是復(fù)制、粘貼、翻頁、再粘貼的漫長(zhǎng)循環(huán)還要小心別把{{username}}這種變量占位符給改壞。如果你的項(xiàng)目也經(jīng)常被這種JSON多語言翻譯的苦差事拖住那么接下來要介紹的jsontt或許能讓你從這場(chǎng)消耗戰(zhàn)里提前下班。這套工具全名叫 jsonttnpm 包名parvineyvazov/json-translator開源免費(fèi)核心就干一件事把 JSON / YAML 文件翻譯成 100 語言順帶把變量占位符、URL、深層嵌套結(jié)構(gòu)都給你保護(hù)好。這篇文章不聊虛的直接帶你走一遍從裝到用的完整流程每一關(guān)都有可復(fù)制的命令。第一關(guān)裝好它然后看著 en.json 長(zhǎng)出 zh-CN.json先做環(huán)境準(zhǔn)備。要求 Node.js 16 及以上然后全局安裝 CLInpm install -g parvineyvazov/json-translator裝完驗(yàn)證一下版本能輸出版本號(hào)就說明 CLI 已經(jīng)就位jsontt --version 重點(diǎn)這個(gè)工具的真正用法是jsontt 文件路徑加一串選項(xiàng)而不是jsontt translate xxx這種子命令風(fēng)格。記住這一點(diǎn)后面所有例子都不容易跑偏。現(xiàn)在假設(shè)你的項(xiàng)目里有一個(gè)configs/en.json里面有這樣的內(nèi)容{ app: { title: Welcome to our platform!, subtitle: Sign up now and get {{bonus}} credits }, nav: { home: Home, settings: Account settings } }想把它翻譯成中文簡(jiǎn)體一條命令jsontt configs/en.json --module google --from en --to zh-CN命令的意思是用 Google 翻譯引擎把 en.json 從英文翻譯成中文生成的文件默認(rèn)放在源文件同目錄命名為zh-CN.json。翻完打開zh-CN.json你會(huì)看到鍵名一個(gè)沒動(dòng)嵌套結(jié)構(gòu)原樣保留只有文案變成了中文{{bonus}}還好端端地待在原地。這就是第一關(guān)通關(guān)標(biāo)志。如果你不想背參數(shù)直接jsontt configs/en.json不帶任何選項(xiàng)它會(huì)進(jìn)入交互式問答一步步問你用什么引擎、從哪種語言翻到哪種語言效果是一樣的。第二關(guān)一次命令同時(shí)生成 4 個(gè)語種版本逐個(gè)語言翻一遍要跑四次命令不需要。-t參數(shù)后面可以跟一串語言代碼空格隔開即可jsontt configs/en.json --module google --from en --to zh-CN ja fr de執(zhí)行完你的configs/目錄會(huì)從孤零零一個(gè) en.json 變成一整套語言包c(diǎn)onfigs/ ├── en.json ├── zh-CN.json ├── ja.json ├── fr.json └── de.json?? 注意多語言同時(shí)翻譯時(shí)每個(gè)語種是并行發(fā)請(qǐng)求的速度上去了也意味著同一時(shí)間對(duì)翻譯服務(wù)有多次調(diào)用。如果你的文本量大別急著加大并發(fā)后面有專門的調(diào)優(yōu)說明。如果嫌文件名不合習(xí)慣可以用--name給輸出文件加前綴jsontt configs/en.json --module google --from en --to zh-CN ja --name messages這樣生成的是messages.zh-CN.json和messages.ja.json。想要在命名上掌握主動(dòng)權(quán)的讀者記住這個(gè)參數(shù)就夠了。第三關(guān)把變量占位符穩(wěn)穩(wěn)護(hù)住的秘密翻譯最怕什么最怕變量被翻壞。想想看如果Welcome {{user}}被翻譯引擎翻成歡迎 {user}還好要是花括號(hào)被吞掉、或者{{被拆散前端渲染直接崩。jsontt 的處理思路是把保護(hù)做在翻譯之前它專門有一個(gè)叫 ignorer忽略器的模塊在干活。翻譯前工具會(huì)掃描整段文本把需要保護(hù)的片段先鎖起來翻譯完成后再原樣放回去。它的規(guī)則很直觀雙花括號(hào){{word}}和單花括號(hào){word}的內(nèi)容一律不翻譯URL 鏈接自動(dòng)識(shí)別并保護(hù)不需要你做任何配置看一個(gè)實(shí)際例子把這條翻譯成德語{ text: this is a puppy https://shorturl.at/lvPY5 }普通翻譯工具很可能把鏈接里的字符也攪進(jìn)去而 jsontt 的結(jié)果是{ text: das ist ein welpe https://shorturl.at/lvPY5 }文案翻了鏈接毫發(fā)無損。這套先鎖定、后翻譯、再還原的機(jī)制實(shí)現(xiàn)都在src/core/ignorer.ts里感興趣的同學(xué)可以順著源碼看看它具體是怎么用正則做 map 和 unmap 的。想讓它只翻文本不碰鏈接你其實(shí)什么都不用做這是默認(rèn)行為。但有一點(diǎn)要記住保護(hù)的前提是你在文案里用了{(lán){變量}}這種標(biāo)準(zhǔn)寫法。如果你把變量寫成別家框架特有的語法那就需要自己先做一層映射再交給 jsontt。第四關(guān)增量更新只翻新改動(dòng)的幾行語言包不是一次性產(chǎn)物產(chǎn)品文案每周都在變。假設(shè)你已經(jīng)翻好了 zh-CN.json這周只改了 en.json 里 3 行文案難道要全量重翻一遍jsontt 在這里做了個(gè)很聰明的設(shè)計(jì)執(zhí)行翻譯時(shí)如果目標(biāo)語言的文件已經(jīng)存在它會(huì)先讀取舊文件把已有的翻譯結(jié)果直接復(fù)用只對(duì)新增或變化的文本發(fā)起新的翻譯請(qǐng)求。也就是說第二次、第三次跑同一條命令速度會(huì)越來越快費(fèi)用如果用 AI 引擎也會(huì)越來越省。配合緩存使用效果更佳jsontt configs/en.json --module google --from en --to zh-CN ja --cache--cache會(huì)把原文 → 譯文的映射存進(jìn)本地緩存文件下次遇到相同的句子直接命中緩存連翻譯請(qǐng)求都不用發(fā)。你會(huì)發(fā)現(xiàn)命令行輸出的統(tǒng)計(jì)里多了In cache這一項(xiàng)那就是被緩存攔下來的翻譯次數(shù)。 重點(diǎn)增量復(fù)用 本地緩存這兩招組合起來就是多輪迭代階段翻譯成本趨近于零的秘訣。如果你的項(xiàng)目每周都在改文案務(wù)必把這兩條養(yǎng)成習(xí)慣。終極大招多引擎切換與翻車自救引擎自由一個(gè)參數(shù)的事免費(fèi)用戶的主力是 Google、Bing、Libre Translate、Argos Translate 這幾個(gè)免費(fèi)引擎切換只需要改--module的值# 用 Bing 翻譯 jsontt configs/en.json --module bing --from en --to zh-CN # 用 Libre Translate jsontt configs/en.json --module libre --from en --to zh-CN需要更高翻譯質(zhì)量時(shí)可以切到 AI 引擎。GPT 系列讀OPENAI_API_KEY環(huán)境變量Gemma、Mixtral、Llama 系列走 Groq 讀GROQ_API_KEYDeepL 讀DEEPL_API_KEYexport OPENAI_API_KEYsk-xxxx jsontt configs/en.json --module gpt-4o --from en --to zh-CN不用 API key 也能本地跑的是 llama-cpp它走h(yuǎn)ttp://localhost:8080/v1適合有本地推理環(huán)境、又不想把文案發(fā)給第三方服務(wù)的團(tuán)隊(duì)。翻車自救fallback 與并發(fā)控制免費(fèi)翻譯引擎偶爾會(huì)拒絕請(qǐng)求尤其是在高頻調(diào)用之后。兩個(gè)參數(shù)幫你兜底jsontt configs/en.json --module google --from en --to zh-CN --fallback yes --concurrencylimit 3--fallback yes當(dāng)前引擎失敗時(shí)自動(dòng)按可用引擎列表換下一個(gè)繼續(xù)翻翻譯流程不會(huì)因?yàn)閱螚l失敗而中斷--concurrencylimit控制并發(fā)請(qǐng)求數(shù)默認(rèn)是 3。調(diào)高能加速但越高越容易被服務(wù)商臨時(shí)封禁這是官方文檔里的原話慎用 如果某條文案所有引擎都失敗了工具會(huì)把這條值寫成--占位符而不是讓整個(gè)進(jìn)程崩潰退出。你可以事后用編輯器全局搜索--找出漏網(wǎng)之魚單獨(dú)補(bǔ)救。踩坑現(xiàn)場(chǎng)實(shí)錄三個(gè)真實(shí)教訓(xùn)教訓(xùn)一大文件別硬開高并發(fā)。我試過把一張 2000 行的大語言包用--concurrencylimit 20加速結(jié)果跑到一半被 Google 臨時(shí)限流一大批文案變成--。正確做法是先用默認(rèn)的 3觀察統(tǒng)計(jì)里失敗的條數(shù)再逐步往上加10 以內(nèi)比較穩(wěn)妥。教訓(xùn)二YAML 文件同樣適用但縮進(jìn)別亂。jsontt 支持.yaml/.yml文件翻譯輸出文件的擴(kuò)展名會(huì)跟隨源文件。但 YAML 對(duì)縮進(jìn)極其敏感翻譯前先確認(rèn)源文件格式合法否則解析階段就會(huì)報(bào)錯(cuò)。教訓(xùn)三翻譯對(duì)象時(shí)小心空字符串和超長(zhǎng)值。工具對(duì)空值有安全檢查空字符串會(huì)原樣跳過但如果某條文案超過合理長(zhǎng)度內(nèi)部有 5000 字符的閾值設(shè)計(jì)建議拆成多條再翻避免單條請(qǐng)求超時(shí)。從代碼里調(diào)用的另一種姿勢(shì)如果你不想用命令行jsontt 也能當(dāng)普通 npm 庫用。把翻譯能力嵌進(jìn)你自己的構(gòu)建腳本里實(shí)現(xiàn)發(fā)布前自動(dòng)補(bǔ)齊多語言const translator require(parvineyvazov/json-translator); const en { login: { title: Login {{name}}, failure: Failed } }; const zh await translator.translateObject( en, translator.languages.English, translator.languages.Chinese_Simplified );核心入口分布在src/core/下文件讀寫是json_file.ts深層對(duì)象遍歷和請(qǐng)求隊(duì)列是json_object.ts忽略機(jī)制是ignorer.ts翻譯模塊實(shí)現(xiàn)是modules/functions.ts。完整支持的語言清單見 docs/LANGUAGES.md超過 100 種語言都有對(duì)應(yīng)代碼表。收尾行動(dòng)清單現(xiàn)在就動(dòng)手給下一個(gè)發(fā)版周期省出半天時(shí)間安裝執(zhí)行npm install -g parvineyvazov/json-translator然后jsontt --version確認(rèn)就緒想從源碼跑通全流程也可以git clone https://gitcode.com/gh_mirrors/js/json-translator后按倉庫 README 操作跑通第一條命令拿你的en.json執(zhí)行jsontt en.json --module google --from en --to zh-CN打開同目錄下新生成的zh-CN.json檢查占位符和結(jié)構(gòu)建立發(fā)布流程把--cache和--fallback yes寫進(jìn)你的構(gòu)建腳本讓語言包隨每次構(gòu)建自動(dòng)增量更新從此告別手動(dòng)復(fù)制粘貼【免費(fèi)下載鏈接】json-translatorjsontt - AI JSON Translator with GPT / Gemma / Mixtral / llama other FREE translation modules to translate your json/yaml files into other languages ? Check Readme ? Supports GPT / Gemma / Mixtral / llama / DeepL / Google / Bing / Libre / Argos項(xiàng)目地址: https://gitcode.com/gh_mirrors/js/json-translator創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考