持續本地化: 每次合併,所有語言皆就緒。
持續本地化會在程式碼變更時同步翻譯新增與修改的字串,而非在每次發布前另闢階段處理。每種語言都能隨時隨程式碼一併發布。
什麼是持續本地化?
持續本地化是一種工作流程,當字串新增或變更時會自動進入翻譯流程,且譯文會直接回傳至產品中,無需人工排程。
由於翻譯從未停止,因此不存在獨立的翻譯階段。開發人員合併字串後,譯文會隨程式碼同步流動,發布作業不再受制於任何人的檔案交付。
這是持續交付中的本地化環節。若團隊每天合併程式碼卻每幾週才移交翻譯,大多數時間各語言版本都會落後於程式碼。持續本地化能將此落差縮短至單一執行週期。
這不代表未經審閱的機器翻譯結果會直接上線。您可以決定哪些字串需要人工處理,而發布版本僅包含已審閱的內容。
差異在於翻譯發生的時機, 而非由誰執行。
| 變更內容 | 批次移交 | 持續進行 |
|---|---|---|
| 並排顯示 | ||
| 翻譯發生的時機 | 在每次發布前的階段 | 隨每個字串變更 |
| 觸發條件 | 有人匯出檔案 | 推送、合併或內容變更 |
| 每項工作的規模 | 一次處理數週的字串 | 單次變更中的字串 |
| 發布前需等待的事項 | 等待檔案回傳 | 針對您標記的字串進行審閱 |
| 臨時的文案變更 | 另一次往返 | 重新執行該單一鍵值 |
| 譯者的工作依據 | 字串試算表 | 包含術語、記憶庫比對結果和截圖的資料列 |
| 上線時的語言 | 分批進行,一波接一波 | 與功能同步上線 |
- 翻譯發生的時機
- 在每次發布前的階段
- 觸發條件
- 有人匯出檔案
- 每項工作的規模
- 一次處理數週的字串
- 發布前需等待的事項
- 等待檔案回傳
- 臨時的文案變更
- 另一次往返
- 譯者的工作依據
- 字串試算表
- 上線時的語言
- 分批進行,一波接一波
- 翻譯發生的時機
- 隨每個字串變更
- 觸發條件
- 推送、合併或內容變更
- 每項工作的規模
- 單次變更中的字串
- 發布前需等待的事項
- 針對您標記的字串進行審閱
- 臨時的文案變更
- 重新執行該單一鍵值
- 譯者的工作依據
- 包含術語、記憶庫比對結果和截圖的資料列
- 上線時的語言
- 與功能同步上線
持續本地化的運作方式
追蹤一個新字串在流程中的路徑。每個步驟都呈現您實際會看到的畫面。
變更透過 CLI、GitHub Action 或 Git 主機上的應用程式傳送至 Transglot。系統會以 20 種原生格式之一解析原始檔,並將每個字串與專案中現有的內容進行比對。只有新增和變更的字串會進入後續流程。
翻譯記憶庫中的完全匹配會填滿該行且不計字數。剩餘內容將連同您的術語表、風格指南以及該鍵的上下文一起送至 Glossa。
每次運行都會檢查每一行的佔位符、複數形式、術語和長度。損壞的佔位符、缺失的複數形式或禁用的術語會被修復並再次檢查;若第二次仍失敗則拒絕發布。僅超長的行會被寫入,Team 方案可自動批准或由 QA 運行標記以供審查。
運行絕不會覆蓋人員編輯或審查過的行。如果其源文本後來發生變化,現有文本將保留,運行會統計該行並通知您;在 Team 方案中,建議的更新會等待有人接受。
Git 應用將語言環境文件提交到一個同步分支,並保持一個拉取請求為最新狀態。在 GitHub 上,對拉取請求評論 /translate,文件將進入該拉取請求的專屬分支。或者發布到 CDN,正在運行的產品無需發布即可讀取更改。
持續本地化出錯的六種方式,以及如何避免
運行覆蓋了人員的工作成果
每位編寫者首先檢查行的狀態:運行、記憶庫匹配和推送。人員編輯或審查過的行將保留,並由運行報告。
→法文,已審閱,原文剛變更
✓保留、計數、回報
損壞的字串進入生產環境
每個輸入的權杖都必須完整輸出。在 ICU 專案中,會在轉譯時引發錯誤的訊息不會進入拉取請求、連接器或 CDN 套件,且執行作業會將其命名標記。
→{count, plural, one {# article}
✓排除於檔案之外,並在執行作業中命名
儲存庫充斥著機器人發起的拉取請求
每個儲存庫僅使用一個同步分支與一個拉取請求。兩次快速推送會匯聚至該分支,而非開啟第二個拉取請求。
→#812 #815 #819 #823 本地化更新
✓#812 transglot/sync,就地更新
原文編輯導致舊翻譯過時
每個目標列都會記錄其撰寫時對應的原文,因此一旦字串變更,系統會立即識別所有語言版本均已過時,並僅重新執行該金鑰的作業。
→「儲存」變更為「儲存為草稿」。法文、德文、日文仍顯示「儲存」
✓法文、德文、日文針對該單一金鑰重新執行
每次執行都會對整個專案再次計費
執行規模取決於變更內容。未變更的字串不會傳送,完全符合記憶庫的內容不計字數,而由人員擁有的列會在產生任何費用前被拒絕處理。
→檔案包含 48,000 個字
✓本次執行:60 個字
未完成的拉取請求清空地區設定檔案
若伺服器回報某地區設定無任何項目,拉取請求將拒絕覆寫含有內容的檔案,並退出代碼 1 以停止管線流程。
→拉取:日文 0 個項目,檔案包含 1,204 個項目
✓拒絕以空套件覆寫 locales/ja.json
- run 4182 法文:草稿缺少預留位置,重試後已修復
- run 4182 德文:保留 3 個列,由人員擁有
- run 4182 日文:41 個列來自記憶庫,0 個字
- run 4183 阿拉伯文:重試後缺少複數形式,該列遭拒絕
- pull 已寫入 locales/pt-BR.json
- sync transglot/sync 已更新,拉取請求 #812
這三者皆連線至您的儲存庫。 差異在於合併時的處理方式。
資料擷取自各公司於 2026 年 11 月 5 日的官方頁面。價格欄位來自下方連結的比較頁面,其中顯示方案與計算方式。價格與方案可能會變動,請在決定前再次確認。
| 運作方式 | Transglot | Lokalise | Crowdin |
|---|---|---|---|
| 新字串已合併 | 預設進行翻譯 推送會啟動執行作業。專案設定可將其關閉。 | 設定完成後即進行翻譯 建立金鑰和匯入檔案時,自動化功能預設為關閉。包含 AI 步驟的工作流程會依其排程執行。 | 啟用後即進行翻譯 在「設定」>「自動翻譯」中,每次上傳時都會執行。Git 同步預設每小時執行一次。 |
| 翻譯未通過檢查 | 修復一次,隨後拒絕 針對損壞的預留位置、複數形式或禁止用語,會在每次執行的每一列中處理。長度超限會被記錄。在 ICU 專案中,損壞的列不會納入拉取請求、連接器和 CDN。 | 錯誤層級的檢查會阻止在編輯器中儲存 每項檢查可設定為關閉、警告或錯誤。 | 錯誤層級的檢查會阻止儲存 每項檢查可設定為警告或錯誤。 |
| 人員已編輯該列 | 執行作業拒絕寫入 記憶體比對和推送也是如此。如果來源稍後發生變更,執行作業會回報該列。 | 自動化功能預設會填寫空白值 強制選項和清除動作會覆蓋已填寫的值。 | 選項會保留人工和已核准的列 也存在全部替換選項。 |
| 繁忙儲存庫中的拉取請求 | 一個分支,一個拉取請求 每次推送時就地更新。 | 每個拉取請求使用新分支 以時間戳記命名。 | 服務分支,每小時同步 預設為每小時,且可以變更間隔時間。 |
| 方案計費項目 | 翻譯字數,每種語言計一次 完全匹配無需付費。儲存字串也無需付費。 | 處理字數 基礎語言與目標語言皆計入。 | 託管字數 待翻譯字數乘以目標語言數量。 |
| AI 費用來源 | 方案包含的字數 不另行計費。 | 各方案的 AI 字數額度 標準 AI 與專業 AI 字數各自獨立計算。 | 獨立餘額或使用自有金鑰 Crowdin 的託管 AI 使用點數支付,不包含在訂閱內。 |
| 相同工作:10 種語言的 5,000 個字串 | 每月 $39 Team,已含翻譯 | 每月 $1,049 Advanced (billed yearly) | 每月 $138 Pro with 560K hosted words (billed monthly),另加 AI |
| GitHub、GitLab、Bitbucket、Azure Repos、CLI 及 MCP 伺服器 | 全部支援 Git 應用程式從 Team 方案開始提供,涵蓋雲端版本。 | 全部支援 所有方案均提供整合功能。 | 全部支援 亦支援 Bitbucket Server。 |
- 新字串已合併
- 預設進行翻譯推送會啟動執行作業。專案設定可將其關閉。
- 翻譯未通過檢查
- 修復一次,隨後拒絕針對損壞的預留位置、複數形式或禁止用語,會在每次執行的每一列中處理。長度超限會被記錄。在 ICU 專案中,損壞的列不會納入拉取請求、連接器和 CDN。
- 人員已編輯該列
- 執行作業拒絕寫入記憶體比對和推送也是如此。如果來源稍後發生變更,執行作業會回報該列。
- 繁忙儲存庫中的拉取請求
- 一個分支,一個拉取請求每次推送時就地更新。
- 方案計費項目
- 翻譯字數,每種語言計一次完全匹配無需付費。儲存字串也無需付費。
- AI 費用來源
- 方案包含的字數不另行計費。
- 相同工作:10 種語言的 5,000 個字串
- 每月 $39Team,已含翻譯
- GitHub、GitLab、Bitbucket、Azure Repos、CLI 及 MCP 伺服器
- 全部支援Git 應用程式從 Team 方案開始提供,涵蓋雲端版本。
- 新字串已合併
- 設定完成後即進行翻譯建立金鑰和匯入檔案時,自動化功能預設為關閉。包含 AI 步驟的工作流程會依其排程執行。
- 翻譯未通過檢查
- 錯誤層級的檢查會阻止在編輯器中儲存每項檢查可設定為關閉、警告或錯誤。
- 人員已編輯該列
- 自動化功能預設會填寫空白值強制選項和清除動作會覆蓋已填寫的值。
- 繁忙儲存庫中的拉取請求
- 每個拉取請求使用新分支以時間戳記命名。
- 方案計費項目
- 處理字數基礎語言與目標語言皆計入。
- AI 費用來源
- 各方案的 AI 字數額度標準 AI 與專業 AI 字數各自獨立計算。
- 相同工作:10 種語言的 5,000 個字串
- 每月 $1,049Advanced (billed yearly)
- GitHub、GitLab、Bitbucket、Azure Repos、CLI 及 MCP 伺服器
- 全部支援所有方案均提供整合功能。
- 新字串已合併
- 啟用後即進行翻譯在「設定」>「自動翻譯」中,每次上傳時都會執行。Git 同步預設每小時執行一次。
- 翻譯未通過檢查
- 錯誤層級的檢查會阻止儲存每項檢查可設定為警告或錯誤。
- 人員已編輯該列
- 選項會保留人工和已核准的列也存在全部替換選項。
- 繁忙儲存庫中的拉取請求
- 服務分支,每小時同步預設為每小時,且可以變更間隔時間。
- 方案計費項目
- 託管字數待翻譯字數乘以目標語言數量。
- AI 費用來源
- 獨立餘額或使用自有金鑰Crowdin 的託管 AI 使用點數支付,不包含在訂閱內。
- 相同工作:10 種語言的 5,000 個字串
- 每月 $138Pro with 560K hosted words (billed monthly),另加 AI
- GitHub、GitLab、Bitbucket、Azure Repos、CLI 及 MCP 伺服器
- 全部支援亦支援 Bitbucket Server。
從字串所在位置啟動。 每種方式都通向同一條管線。
如何設定持續本地化
- 01
從程式碼中提取字串
每個面向使用者的字串都需要在區域檔案中擁有穩定的金鑰。Transglot 支援 20 種格式,因此您可以保留現有的格式。
jsonyamlxliffarb - 02
連接儲存庫
初始化指令會尋找您的區域檔案,透過瀏覽器讓您登入,上傳您已有的內容,並執行首次翻譯。
npx transglot@latest init - 03
在每次合併時執行
新增 GitHub Action、從任何其他 CI 呼叫 CLI,或為 GitHub、GitLab、Bitbucket 或 Azure Repos 安裝應用程式。
transglot push --wait - 04
決定哪些項目需要人工介入
在拉取規則上將 min_state 設為 reviewed,該檔案就只會包含經人工審閱的字串。若不設定,草稿也會發布。
min_state: reviewed
每次合併執行的成本: 變更的字詞。
「字詞」指的是來源字詞,每種目標語言計算一次。執行規模取決於變更內容,因此即使專案龐大,若合併僅涉及五種語言中的十二個字詞,總計也僅為六十個字詞。
符合 Starter 方案:$19/mo,每月 300,000 個字詞。
這約佔配額的 9%。
此計算僅包含翻譯。品質檢查、品牌語氣草稿和修補也計為字詞,而來自記憶庫的精確匹配則不收費。CLI 和 GitHub Action 從 Starter 方案開始支援,而適用於 GitHub、GitLab、Bitbucket 和 Azure Repos 的應用程式則從 Team 方案開始支援。
持續本地化無法解決的三件事
字串仍卡在程式碼中
流水線只能翻譯它讀取到的內容。硬編碼的字串以及由多個部分拼湊而成的句子必須先修正,這通常是導致發布停滯的主要原因。
無人負責文案
自動化會移動字串,但不會決定產品如何命名事物。必須有人負責管理詞彙表,否則無人閱讀的語言可能會在不知不覺中產生偏差。
需要人工判斷的文案
法律條款、定價和品牌標語應由人工處理。將它們送交審核,並在獲得批准前不要將其包含在發布檔案中。
持續本地化常見問題
團隊在啟用此功能前常問的問題。