與 Weblate 整合

Weblate 基礎

專案和元件結構

在 Weblate 中,翻譯被組織成專案和元件。每個專案可以包含多個元件,這些元件又包含各個語言的翻譯。元件對應的是一個可翻譯的檔案(例如 GNU gettext PO (Portable Object)Android 字串資源)。專案可以幫助您將元件組織成邏輯集合(例如,將一個應用中用到的所有翻譯集合在一起)。

此外,也可以使用類別來組織專案內的元件。元件可屬於某個類別,類別也可以巢狀排列。

預設情況下,每個專案內都有對跨元件傳播的公共字串的翻譯。這減輕了重複和多版本翻譯的負擔。但假如翻譯應有所不同,可以使用 允許翻譯重用 通過 元件設定 停用翻譯傳播。

儲存庫整合

Weblate 的設計可與上游版本控制儲存庫整合;持續在地化 說明其組成部分,以及變更如何在兩者之間流動。

也參考

架構概覽 描述了 Weblate 內部如何運作。

使用者歸屬

Weblate 會使用姓名及電子郵件,讓版本控制儲存庫中的翻譯正確歸屬於譯者。將真實電子郵件附加至提交符合分散式版本控制的精神,也能讓 GitHub 等服務將您在 Weblate 中的貢獻與 GitHub 帳號建立關聯。

不過,此功能也會帶來風險,公佈在版本控制提交中的電子郵件地址可能會被濫用。此外,一旦此類提交公佈在公開的程式碼託管平台(例如 GitHub),實際上將無法撤回。為了避免這種情況,Weblate 允許在 帳號 中選擇私密提交電子郵件。

因此,管理員在設定 Weblate 時應考慮到這一點:

  • 若服務需要服務條款文件,應在其中清楚說明電子郵件的這種用途。法律模組 可協助您完成此設定。

  • PRIVATE_COMMIT_EMAIL_OPT_IN 可以讓電子郵件預設隱藏。

將在地化專案匯入 Weblate

Weblate 的核心功能以 VCS 整合為設計重點,因此最簡單的方式是授予 Weblate 存取儲存庫的權限。匯入流程會引導您將翻譯設定為 Weblate 元件。

或者,您可以使用 Weblate 設定一個包含所有翻譯的純本機儲存庫,無需整合。

從 Weblate 取得更新的翻譯

Weblate 將更新的字串儲存在一個資料庫中並將它們提交到本機版本控制儲存庫。您可以將 Weblate 儲存庫新增為附加的遠端儲存庫(當 Git 匯出器 處於開啟狀態)並從它那裡取得翻譯更新。

在這之前,您可能想要先提交任何在 Weblate 中所做的待處理的變更(請參閱 惰性提交)。可以透過使用者介面(在 儲存庫維護)或使用 Weblate 用戶端 從指令列執行此操作。

如果您向 Weblate 授予了儲存庫的推送權限,並設定了 元件設定 中的 儲存庫推送 URL,此操作可以自動進行。見 從 Weblate 推送變更

或者,使用 Weblate 的 REST API 更新翻譯,使其與遠端 VCS 儲存庫中的最新上游版本一致。

取得遠端變更至 Weblate

要將您遠端 VCS 儲存庫中近期更新的任何字串取得到 Weblate 中,請允許 Weblate 從上游儲存庫拉取。可以在使用者介面(在 儲存庫維護)上或使用 Weblate 用戶端 從指令列達成這一操作。

這可以透過在您的儲存庫中設定一個 webhook 來自動達成,每當有新的提交時,webhook 就會觸發 Weblate。更多細節請參閱 更新儲存庫

若未使用 VCS 整合,可以透過使用者介面或 Weblate 的 REST API 更新翻譯,使其與程式碼庫一致。

新增新字串

如您的翻譯檔案與程式碼一起儲存在一個遠端版本控制系統中,您很可能有一個現有的工作流供開發人員引入新的字串。任何新增字串的方法都將被採用,但請考慮使用 來源字串的品質閘道 以避免引入錯誤。

當翻譯檔案與程式碼分離時,可以透過以下方法將新字串引入 Weblate。

  • 手動新增:在來源語言的 操作 選單中選取 新增翻譯字串。您可以在表單內選擇 單數複數 選項,請為要加入的新翻譯字串選取適當形式。

  • 程式化地使用 API POST /api/translations/(string:project)/(string:component)/(string:language)/units/.

  • By uploading source file as Replace existing translation file (this overwrites existing strings, so please ensure the file includes both old and new strings) or Add new strings, see 匯入方法.

備註

在 Weblate 中新增字串需要 管理字串

更新目標語言檔案

對於單語言檔案(請參閱 在地化檔案格式),Weblate 可以新增存在於 單語言基底語言檔案 而不是實際翻譯中的新翻譯字串。但它不自動清理陳舊的字串,因為那可能會有難以預料的結果。如果您仍想做的話,請安裝附加元件 清理翻譯檔案,它會根據您的要求處理清理工作。

Weblate 也不會嘗試在原文變更時更新雙語檔案,所以如果需要 po 檔案從 pot 被更新,您有兩個選項:

  • Automatically with an add-on (recommended for continuous updates): Install the 更新 PO 檔案以符合 POT (msgmerge) add-on, which automatically runs msgmerge to update all PO files whenever the POT file changes.

  • 透過上傳手動更新:使用 更新來源字串 匯入方法 上傳 POT 檔案,將其與現有翻譯合併。

提示

來源字串提取工具,例如 xgettextlupdate,需要在 Weblate 之外執行。

引入新字串

您可以在 管理字串 開啟時在 Weblate 中新增新字串,但通常來說更好的做法是引入新字串的同時,一併引入相應的程式碼變更。

單語格式必須設定為將新字串加入 單語言基底語言檔案。這通常由開發者撰寫程式碼時完成。您也可以使用 來源字串的品質閘道 對這些字串進行審閱。

雙語格式通常會透過 xgettextintltool-update 等工具,從原始碼擷取字串。操作方式請遵循在地化框架的說明檔案。擷取字串後,可能還需要額外更新現有翻譯;請參閱 更新目標語言檔案

提示

自動擷取字串目前不在 Weblate 的範圍內。這通常涉及執行不受信任的程式碼,因此較適合一般持續整合系統,而非在地化專用平台。

您可以將這項作業整合至持續整合管線,使新字串自動出現並可供翻譯。此管線也應涵蓋 避免發生合併衝突

管理本機 VCS 儲存庫

Weblate 在其底層版本控制儲存庫中儲存所有翻譯。建議連線到遠端儲存庫,但也可以設定純本機儲存庫。儲存庫維護 允許控制此儲存庫。可用操作的詳細描述,見 儲存庫維護

提示

使用 持續在地化,任何變更都會自動從儲存庫推送,因此通常不需要手動管理它。

../_images/component-repository.webp