常見問題¶
設定¶
如何建立自動化工作流程?¶
Weblate 可以為您半自動處理所有翻譯工作。如果授予它對儲存庫的推送存取權限,則翻譯可以在沒有互動的情況下進行,除非發生某些合併衝突。
如何通過 SSH 存取儲存庫?¶
設定 SSH 金鑰的資訊請參閱 存取儲存庫。
如何修復翻譯中的合併衝突?¶
當 Weblate 與上游儲存庫同時變更翻譯檔案時,偶爾會發生合併衝突。通常可在變更翻譯檔案前(例如執行 msgmerge 前),先合併 Weblate 翻譯來避免。只要讓 Weblate 提交所有待處理翻譯(可在 操作 選單的 儲存庫維護 中執行),再合併儲存庫即可(若未啟用自動推送)。
如果您已經遇到了合併衝突,那麼在您的機器上本機解決所有衝突的最簡單方法是將 Weblate 新增為遠端儲存庫,將它合併到上游,並修復任何衝突。一旦將變更推送回去,Weblate 就將能夠使用合併的版本而無需任何其他特殊操作。
備註
如果在 Pull Request 中解決衝突,請使用一般合併提交加以合併,請勿使用壓縮合併。壓縮合併會建立新的提交,而不會保留 Weblate 的提交,因此 Weblate 可能無法辨識其本機提交已包含在上游,並可能需要重設儲存庫才能復原。
備註
Weblate 預設使用淺層複製,以縮短複製時間並減少磁碟用量。因此,下列工作流程最好從上游儲存庫的最新簽出內容開始。若直接從 Weblate 匯出的儲存庫複製,或上游簽出內容缺少近期提交,git remote update weblate 可能因 warning: no common commits、bad revision 或物件遺失等錯誤而失敗。這不一定表示 Weblate 與上游儲存庫的變更互相衝突。若管理員希望提高此工作流程的可靠性,可以調整 VCS_CLONE_DEPTH。
備註
取決於您的設定, 存取 Weblate 儲存庫可能需要身分驗證。當使用 Weblate 中內建的 Git 匯出器 時,使用您的使用者名稱與 API 金鑰進行身分驗證。
備註
Weblate 自行提供 Git 儲存庫,但它不提供 Git LFS 物件。對使用 Git LFS 的儲存庫,從上游儲存庫複製並將 Weblate 新增為另一個遠端。如果只需要 Git-tracked 檔案,可以使用 GIT_LFS_SKIP_SMUDGE=1 引數從 Weblate 複製跳過下載 Git LFS 物件。
從上游儲存庫的最新簽出內容開始時,工作流程通常如下:
# Open an existing up-to-date checkout of the upstream repository or perform
# a fresh one:
git clone UPSTREAM_REPOSITORY_URL
cd REPO
# Commit all pending changes in Weblate, you can do this in the UI as well:
wlc commit
# Lock the translation in Weblate, again this can be done in the UI as well:
wlc lock
# Add Weblate as remote:
git remote add weblate https://hosted.weblate.org/git/project/component/
# You might need to include credentials in some cases:
git remote add weblate https://username:APIKEY@hosted.weblate.org/git/project/component/
# Update weblate remote:
git remote update weblate
# Merge Weblate changes:
git merge weblate/main
# Resolve conflicts:
edit …
git add …
…
git commit
# Rebase changes (if Weblate is configured to do rebases)
git rebase origin/main
# Push changes to upstream repository, Weblate will fetch merge from there:
git push
# Open Weblate for translation:
wlc unlock
如果在 Weblate 中使用多個分支,那麼可以對所有的分支做相同的事:
# Add and update Weblate remotes
git remote add weblate-one https://hosted.weblate.org/git/project/one/
git remote add weblate-second https://hosted.weblate.org/git/project/second/
git remote update weblate-one weblate-second
# Merge QA_4_7 branch:
git checkout QA_4_7
git merge weblate-one/QA_4_7
... # Resolve conflicts
git commit
# Merge main branch:
git checkout main
git merge weblates-second/main
... # Resolve conflicts
git commit
# Push changes to the upstream repository, Weblate will fetch the merge from there:
git push
在 gettext PO 檔案的情況下,有一種方式以半自動方式來合併衝突:
取回並儲存 Weblate Git 儲存庫的本機複製。還要得到上游 Git 儲存庫的第二個新的本機複製(也就是需要上游 Git 儲存庫的兩份副本:完整的副本和工作副本):
# Add remote:
git remote add weblate /path/to/weblate/snapshot/
# Update Weblate remote:
git remote update weblate
# Merge Weblate changes:
git merge weblate/main
# Resolve conflicts in the PO files:
for PO in `find . -name '*.po'` ; do
msgcat --use-first /path/to/weblate/snapshot/$PO\
/path/to/upstream/snapshot/$PO -o $PO.merge
msgmerge --previous --lang=${PO%.po} $PO.merge domain.pot -o $PO
rm $PO.merge
git add $PO
done
git commit
# Push changes to the upstream repository, Weblate will fetch merge from there:
git push
如何同時翻譯多個分支?¶
Weblate 支援在一個 專案設定 內推送翻譯變更。對於每個將其打開的 元件設定 (預設行為),所作的變更自動傳遞給其它元件。即使分支本身已經非常多樣化了,也能以這種方式保持同步,並且不能在他們之間簡單地合併翻譯變更。
一旦從 Weblate 合併了變更,就會不得不合併這些分支(依賴於您的開發工作流程),而丟棄差異:
git merge -s ours origin/maintenance
也參考
如何翻譯多平台專案?¶
Weblate 支援大範圍的檔案格式(請參閱 在地化檔案格式),而最容易的方式時對每個平台使用本機格式。
一旦在一個專案中將所有平台的翻譯檔案作為元件新增(請參閱 新增翻譯專案和元件),就可以立刻使用翻譯傳播功能(預設開啟,並且可以在 元件設定 中關閉),來翻譯所有平台的字串了。
也參考
如何匯出 Weblate 使用的 Git 儲存庫?¶
儲存庫沒有什麼特殊的,它存在於 DATA_DIR 目錄下面,並被命名為 vcs/<project>/<component>/。如果有 SSH 範文這臺機器,那麼可以直接使儲存庫儲。
對於匿名存取,您會想要執行 Git 伺服器,並讓它為外部世界提供儲存庫服務。
此外,可以在 Weblate 內替代使用 Git 匯出器 而使其自動化。
將變更推送回上游的選項是什麼?¶
這嚴重依賴於您的設定,Weblate 在這個領域是非常靈活的。這裡是使用 Weblate 的一些工作流程範例:
Weblate 自動推送並合併變更(請參閱 如何建立自動化工作流程?)。
您需要手動告訴 Weblate 去推送(需要上游儲存庫的推送存取)。
一些人將 Weblate git 儲存庫的變更手動合併到上游儲存庫中。
一些人重寫由 Weblate 產生的歷史(例如通過刪除合併提交),合併變更,並告訴 Weblate 重設上游儲存庫中的內容。
當然您可以按您的意願自由混用所有這些方法。
如何限制 Weblate 只存取翻譯,而不向它揭露來源嗎?¶
可以使用 git submodule 將翻譯從原始碼中分離出來,而仍將它們至於版本控制之下。
以您的翻譯檔案建立儲存庫。
將其作為子模組加入到您的程式碼中:
git submodule add git@example.com:project-translations.git path/to/translations
將 Weblate 連結到這個儲存庫上,它不再需要存取包含您原始碼的儲存庫。
可以從 Weblate 更新帶有翻譯的主儲存庫,通過:
git submodule update --remote path/to/translations
更多細節請諮詢 git submodule 文件。
如何檢查 Weblate 是否被正確地設定?¶
Weblate 包括一組設定檢查,可以在管理面板中看到,只需按照管理面板中的 Performance report 連接,或直接開啟 /manage/performance/ URL 即可。
為什麼所有提交是由 Weblate <noreply@weblate.org> 來執行?¶
Weblate 對所有提交使用 Weblate <noreply@weblate.org> 作為預設 提交者,此設定由 DEFAULT_COMMITER_EMAIL 與 DEFAULT_COMMITER_NAME 控制。這是用來表示提交曾由 Weblate 處理的技術辨識資訊。
不過,每個提交的 作者 會正確記錄為實際進行翻譯的個別使用者(使用 Git 時)。因此,可以檢查提交作者欄位,瞭解每個字串實際由誰翻譯。Mercurial 也有相同行為;只有 Subversion 不具備此功能。
備註
在 Git 中,提交者(建立提交物件的人)與作者(實際進行變更的人)有所區別。Weblate 擔任提交者,同時保留個別譯者的作者署名。
若無法判定提交的作者身分(例如匿名建議或機器翻譯結果產生的自動變更),作者會設為匿名使用者。您可以在 ANONYMOUS_USER_NAME 中設定匿名使用者的名稱與電子郵件地址。
也參考
如何在不遺失 Weblate 的歷史紀錄將檔案移至 Git 儲存庫?¶
要在變更檔案位置後保留連結到字串的歷史記錄,註解或螢幕擷圖,您需要確保這些字串永遠不會在Weblate中刪除。如果 Weblate 儲存庫已更新,但元件設定仍指向舊檔案,則可能會發生這些刪除操作。這使得Weblate認為它應該刪除所有翻譯。
解決此問題的方法是與 Weblate 同步執行操作:
在 Weblate 鎖定受影響的元件。
將未決的變更提交並合併到上游儲存庫。
在 專案設定 中停用接收 webhook;如此可避免 Weblate 立即看到儲存庫中的變更。
在儲存庫中進行任何需要的變更(例如使用 git mv),將它們推送到上游儲存庫。
變更 元件設定 以相符新設定;在變更設定時,Weblate 將取得更新的儲存庫並注意變更的位置,同時保留現有的字串。
解鎖元件並重新啟用專案設定中的掛勾。
提示
在這種破壞性變更前執行 專案層級備份 也許會有用。
使用¶
如何檢閱其他人的翻譯?¶
在 Weblate 中,基於工作流程有幾種複查方式,請參閱 翻譯工作流程。
您可以在 通知 中訂閱做出的任何變更,然後透過電子郵件檢視其他人的貢獻。
在翻譯檢視底部有個複查工具,可以在那裡選擇瀏覽給定時間以來其他人進行的翻譯。
也參考
如何提供來源字串的回饋?¶
在翻譯下方的情境分頁中,可以使用 留言 分頁針對來源字串提供意見回饋,或與其他譯者討論。
翻譯時如何使用現有的翻譯?¶
得益於共享的翻譯記憶,Weblate 中的所有翻譯都可以使用。
您可以將現有翻譯記憶匯入 Weblate。
使用匯入功能將概要匯入作為翻譯、建議或需要檢閱的翻譯。這是使用概要或相似的翻譯資料庫一次性翻譯的最好方法。
您可以使用所有現有資料庫設定 tmserver,再讓 Weblate 使用它。若翻譯期間需要多次使用翻譯記憶,這種方式很實用。
另一個選項是在單一 Weblate 事件中翻譯所有相關專案,這樣同樣可以從其它專案中自動地拾取翻譯。
Weblate 除了更新翻譯,還更新翻譯檔案嗎?¶
Weblate 嘗試將翻譯檔案中的變更限制為最小。對於有些檔案格式,很不幸會導致將檔案重新格式化。如果想要將檔案保持為自己的格式化方式,請為其使用預提交掛勾。
也參考
如何合併更新的 POT 檔案和 PO 譯文?¶
POT 範本檔案變更時更新 PO 檔案的資訊,見 更新目標語言檔案。
語言定義來自何處以及如何新增自己的語言定義?¶
語言定義的基本組包括在 Weblate 和 Translate-toolkit 中。這覆蓋了超過 150 種語言,並且包括了複數形式和文字方向的資訊。
您可以在管理介面自由定義自己的語言,只需要提供與之相關的資訊。
也參考
Weblate 能將模糊字串中的變更醒目顯示嗎?¶
Weblate 支援這個功能,然而它需要資料來顯示差異。
對於 Gettext PO 檔案,更新 PO 檔案時,必須將參數 --previous 傳遞給 msgmerge,例如:
msgmerge --previous -U po/cs.po po/phpmyadmin.pot
對於單語言翻譯,Weblate 可以通過 ID 找到之前的字串,因此可以自動顯示差異。
當已經更新了範本時,為什麼 Weblate 仍然顯示舊的字串?¶
Weblate 除了允許翻譯者翻譯之外,不會嘗試以任何方式操作翻譯檔案。因此當範本或原始碼變更時,它也同樣不會更新翻譯檔案。您必須簡單地手動去做,並將變更推送到儲存庫,然後 Weblate 會自動拾取變更。
備註
在更新翻譯檔案之前在 Weblate 中完成變更合併,這通常是個好主意,因為否則的話通常會以一些合併衝突來結束。
如何處理重新命名的翻譯檔案?¶
重新命名儲存庫中的檔案時,Weblate 可能會將其視為移除舊檔並加入新檔,導致字串歷史記錄、留言與建議遺失。
要避免這一情況,請按下列步驟進行重新命名:
在 管理本機 VCS 儲存庫 中鎖定翻譯元件。
在 管理本機 VCS 儲存庫 中提交待處理變更。
將 Weblate 的變更合併至上游儲存庫。
使用 啟用掛勾 停用透過掛勾接收更新。
重新命名儲存庫中的檔案。
更新元件設定來相符新檔名。
啟用更新掛勾並解鎖元件。
提示
在這種破壞性變更前執行 專案層級備份 也許會有用。
疑難排解¶
請求有時失敗,錯誤資訊為“too many open files”(開啟檔案過多)¶
有時當您的 Git 儲存庫增長太多並您有太多儲存庫時會發生。壓縮 Git 儲存庫會改善這種情況。
這樣做的最容易方式是執行:
# Go to DATA_DIR directory
cd data/vcs
# Compress all Git repositories
for d in */* ; do
pushd $d
git gc
popd
done
也參考
當存取網站時,“Bad Request (400)”(錯誤的請求)錯誤資訊¶
這很可能因為 ALLOWED_HOSTS 設定不當而產生。需要包含在 Weblate 上存取的所有主機名稱。例如:
ALLOWED_HOSTS = ["weblate.example.com", "weblate", "localhost"]
也參考
“There are more files for the single language (en)”(單一語言‘英語’有多個檔案)是什麼意思?¶
當來源語言有翻譯時這會典型發生。 Weblate 追蹤來源字串,並為此保留來源字串。相同語言的附加字串不會被處理。
如果需要對來源語言進行翻譯,請變更元件設定中的 來源語言。您也許想把 英語(開發者) 用作來源語言,或使用 來源字串的品質閘道。
如果是不需要用到來源語言的翻譯檔案,請從儲存庫中將它移除。
如果需要來源語言的翻譯檔案,但 Weblate 應該忽略它,請透過調整 語言篩選 來排除它。
提示
對於其它語言可能也會得到相似的錯誤資訊。在這種情況下最可能的原因是在 Weblate 中幾個檔案映射到單語言上。
這可能是因為同時使用過時及新的語言代碼(例如日文的 ja 與 jp),或同時納入特定國家/地區及通用代碼(例如 fr 與 fr_FR)。詳情請參閱 解析語言代碼。
功能¶
Weblate 支援 Git 和 Mercurial 之外的 VCS 嗎?¶
Weblate currently does not have native support for anything other than Git (with extended support for GitHub 拉取請求, Gerrit 檢閱請求, and Subversion) and Mercurial, but it is possible to write backends for other VCSes.
Weblate 還支援無 VCS 操作,請參閱 本機檔案。
備註
為了本機支援其它 VCS,Weblate 需要使用分佈式 VCS,並可能能夠調整來與 Git 和 Mercurial 以外的其它任何 VCS 工作,但必須有人應用這項支援。
也參考
Weblate 如何記錄翻譯者?¶
在 Weblate 中進行的每項變更,都會以譯者名稱提交至 VCS。如此每項變更都有正確的作者資訊,也可使用平常追蹤程式碼的標準 VCS 工具加以追蹤。
此外,如果翻譯檔案格式支援,則檔案標頭會更新為包含翻譯者的名稱。
為什麼 Weblate 強制在單一樹中顯示所有 PO 檔案?¶
Weblate 的設計方式是將每個 PO 檔案表示為單一元件。這對翻譯人員來說是有好處的,這樣他們就知道他們實際上在翻譯什麼。
在 4.2 版的變更: 翻譯人員可以將專案的所有元件作為一個整體翻譯成一種特定的語言。
Weblate 為什麼使用像 sr_Latn 或 zh_Hant 這樣的語言編碼?¶
這些語言代碼由 RFC 5646 定義,能更清楚地表示它們其實是不同語言,而非先前誤用的修飾詞(@latin 變體)或國家/地區代碼(中文)。
Weblate 仍能辨識舊版語言代碼,並將其對應至目前代碼;例如 sr@latin 會視為 sr_Latn,zh@CN 則視為 zh_Hans。
備註
Weblate 預設使用含底線的 POSIX 樣式語言代碼,詳情請參閱 語言定義。