附加元件¶
附加元件提供了自訂和自動化翻譯工作流程的方法。管理員可以從每個相應翻譯專案或元件的 操作 ↓ 附加元件 選單新增和管理附加元件。也可以在 管理介面 中進行全站範圍的附加元件安裝。
提示
您也可以使用 API、DEFAULT_ADDONS 或 install_addon 來設定附加元件。
選擇支援手動觸發的附加元件,可從附加元件管理頁面或透過 API 執行。執行結果會記錄在附加元件活動記錄中。
觸發附加元件的事件¶
附加元件安裝¶
安裝附加元件時觸發。
元件更新¶
每當元件發生變化時觸發,例如:
儲存庫中的字串發生變更。
新增了新字串
新增了新翻譯。
每天¶
每天觸發,但附加元件通常會依 BACKGROUND_TASKS 將每日負載分散至不同元件。
事件變更¶
變更事件建立後觸發。
手動觸發¶
當從附加元件管理或 API 手動執行附加元件時觸發。
儲存庫新增後¶
新增翻譯並提交後立即觸發。
儲存庫提交後¶
提交變更後立即觸發。
儲存庫推送後¶
將儲存庫推送至上游後立即觸發。
儲存庫移除後¶
刪除翻譯後立即觸發。
儲存庫更新後¶
每當從上游儲存庫拉取新變更時觸發。
儲存庫提交前¶
提交變更前觸發。
儲存庫推送前¶
將儲存庫推送至上游前觸發。
儲存庫更新前¶
嘗試更新儲存庫前觸發。
單元儲存後¶
儲存字串後立即觸發。
單元同步後¶
字串與 VCS 同步後觸發。
單元建立前¶
儲存新建立的字串後立即觸發。
內建附加元件¶
自動翻譯¶
使用機器翻譯或其他元件來自動翻譯字串。
JavaScript 在地化 CDN¶
在 4.2 版被加入.
- 附加元件 ID:
weblate.cdn.cdnjs- 設定:
threshold最低翻譯數
翻譯字串必須達到的百分比,才能納入翻譯。
css_selectorCSS 選擇器
用來偵測可在地化元素的 CSS 選擇器。
cookie_name語言 Cookie 名稱
儲存語言偏好設定的 Cookie 名稱。
files從 HTML 檔案擷取字串
目前儲存庫中的檔名清單,或用來解析可翻譯字串的遠端 URL。
- 觸發:
將翻譯發佈到內容傳遞網路(CDN),供 JavaScript 或 HTML 在地化使用。
可以用於在地化靜態 HTML 網頁,或者在 JavaScript 程式碼中載入在地化檔案。
為您的元件產生一個唯一的 URL,您可以將其包含在 HTML 頁面中以在地化它們。請參閱 使用 Weblate CDN 翻譯 HTML 和 JavaScript 以瞭解詳情。
備註
此附加元件需要在 Weblate 伺服器上進行額外設定。LOCALIZE_CDN_PATH 設定產生檔案在檔案系統中的寫入位置,LOCALIZE_CDN_URL 則定義提供這些檔案的 URL。Weblate 本身不會提供這些檔案;您必須設定外部來源,通常會使用 CDN 服務。
此附加元件在 Hosted Weblate 上設定並透過 https://weblate-cdn.com/ 提供檔案。
翻譯檔案 CDN¶
在 2026.5 版被加入.
將翻譯檔案發佈到內容傳遞網路。
發佈翻譯檔案而不轉換為其他格式。檔案會寫入附加元件專用 CDN 目錄下,並從 LOCALIZE_CDN_URL/<add-on UUID>/ 提供。單檔翻譯會使用語言代碼及原始副檔名,例如 cs.json 或 de.po。多檔翻譯則會在語言代碼目錄下,依相對於翻譯目錄的路徑提供。單語元件包含來源語言檔案,雙語元件則只發佈目標語言檔案。如需安全提供檔案的指引,請參閱 在地化 CDN。
移除空白字串¶
在 4.4 版被加入.
從翻譯檔案中移除沒有翻譯的字串。
使用此方法可以使翻譯檔案中不存在任何空字串(例如,如果您的在地化函式庫將它們顯示為缺失,而不是退回到來源字串)。
清理翻譯檔案¶
更新所有翻譯檔案以符合單語言基礎檔。對大多數檔案格式而言,這代表會移除基礎檔中不再存在的失時效翻譯金鑰。
對於除翻譯字串外還含有其他內容的格式(例如 HTML 檔案、Windows RC 檔案 或 OpenDocument 格式),此功能也會使翻譯檔案與基礎檔案保持同步。
若只需對單一翻譯檔案執行一次性清理,請在該翻譯的 儲存庫維護 中使用 清理未使用項目,不必安裝附加元件。
加入遺漏語言¶
確保對一個專案內所有元件使用一致的一組語言。
備註
從其他專案分享的元件不會納入此處理。
每隔24小時,和在 Weblate 中加入新語言時,會檢查一次缺失的語言。
不像其他多數附加元件,這個附加元件影響整個專案。
提示
用 自動翻譯 自動翻譯新增加的字串。
元件探索¶
- 附加元件 ID:
weblate.discovery.discovery- 設定:
match用來比對出翻譯檔案的正規表達式
正規表達式必須定義名為「component」與「language」的命名群組。
file_format檔案格式
name_template自訂元件名稱
使用 Django 範本語法。此範本必須包含 {{ component }}。
base_file_template定義單語言的基礎檔案名稱
雙語翻譯檔案請留空。若設定此項,範本必須包含 {{ component }}。
new_base_template定義新翻譯的基礎檔案
用於建立新翻譯的檔案名稱。gettext 請選擇 .pot 檔案。此範本必須包含 {{ component }}。
intermediate_template中間語言檔案
中繼翻譯檔案的檔案名稱。多數情況下,這是開發者提供的翻譯檔案,並在建立實際來源字串時使用。此範本必須包含 {{ component }}。
language_regex語言篩選
掃描檔案遮罩時,用於篩選翻譯檔案的正規表達式。
copy_addons將附加元件,從主要元件複製到新建立的元件
remove移除無相關檔案的元件
- 觸發:
根據版本控制系統中的檔案變更自動加入或移除專案元件。
比對會使用正規表示式,因此能進行複雜設定,但需要具備一些相關知識。用來比對翻譯檔案的正規表示式必須包含兩個具名群組,以比對元件及語言;所有正規表示式具名群組都可在範本欄位中作為變數使用。
探索需求¶
若要成功找到元件,設定必須完成下列所有項目:
正規表示式必須定義
component和language命名組。用來命名或找出各元件檔案的範本欄位必須包含
{{ component }},使轉譯後的值確實會隨找到的元件而變更。對於單語格式,元件必須包含符合
base_file_template的檔案,以及至少一個符合match的翻譯檔案。
完整範例:news_<lang>.md¶
這是常見的以檔名為基礎之語言變體設定:
docs/news_en.mddocs/news_cs.mddocs/guide_en.md
請先使用 以檔名為基礎的語言變體 預設集,再選取相符的檔案格式,並檢閱已填入的值。
- 正規表達式:
(?:(?P<path>.*/))?(?P<component>.+?)_(?P<language>[A-Za-z]{2,3}(?:[_-][A-Za-z0-9]+)*)\.(?P<extension>[^/.]+)- 元件名稱:
{{ component }}- 找到的檔案遮罩:
docs/news_*.mddocs/guide_*.md
在此範例中,{{ component }} 會解析為語言字尾前的基本名稱,因此 docs/news_en.md、docs/news_pt_BR.md 及 docs/news_pt-BR.md 都會成為 news 元件。
您可以在所有檔名欄位中使用 Django 範本標記,例如:
{{ component }}從
component比對群組剖析出的元件名稱{{ component|title }}元件檔案名稱首字母大寫
{{ path }}: {{ component }}正規表示式中的自訂比對群組
一旦點選了 Save,將顯示相符元件的預覽,可以檢查設定是否相符於自己的需要:
元件探索範例¶
上述完整範例涵蓋最常見的以檔名為基礎之變體設定。下列範例顯示其他可比對的儲存庫結構。
每個語言一個資料夾¶
各語言各一個資料夾包含元件的翻譯檔案。
- 正規表達式:
(?P<language>[^/.]*)/(?P<component>[^/]*)\.po- 符合的檔案:
cs/application.pocs/website.pode/application.pode/website.po
Gettext 語系結構¶
儲存 gettext PO 檔案的常用結構。
- 正規表達式:
locale/(?P<language>[^/.]*)/LC_MESSAGES/(?P<component>[^/]*)\.po- 符合的檔案:
locale/cs/LC_MESSAGES/application.polocale/cs/LC_MESSAGES/website.polocale/de/LC_MESSAGES/application.polocale/de/LC_MESSAGES/website.po
複雜的檔案名稱¶
檔案名稱同時使用元件名稱和語言名稱。
- 正規表達式:
src/locale/(?P<component>[^/]*)\.(?P<language>[^/.]*)\.po- 符合的檔案:
src/locale/application.cs.posrc/locale/website.cs.posrc/locale/application.de.posrc/locale/website.de.po
重複的語言代碼¶
路徑和檔案名稱中都使用語言名稱。
- 正規表達式:
locale/(?P<language>[^/.]*)/(?P<component>[^/]*)/(?P=language)\.po- 符合的檔案:
locale/cs/application/cs.polocale/cs/website/cs.polocale/de/application/de.polocale/de/website/de.po
分離 Android 字串¶
Android 資來源字串,切分為多份檔案。
- 正規表達式:
res/values-(?P<language>[^/.]*)/strings-(?P<component>[^/]*)\.xml- 符合的檔案:
res/values-cs/strings-about.xmlres/values-cs/strings-help.xmlres/values-de/strings-about.xmlres/values-de/strings-help.xml
符合多個路徑¶
使用 Java properties 翻譯的多模組 Maven 專案管理。
- 正規表達式:
(?P<originalHierarchy>.+/)(?P<component>[^/]*)/src/main/resources/ApplicationResources_(?P<language>[^/.]*)\.properties- 元件名稱:
{{ originalHierarchy }}: {{ component }}- 符合的檔案:
parent/module1/submodule/src/main/resources/ApplicationResources_fr.propertiesparent/module1/submodule/src/main/resources/ApplicationResource_es.propertiesparent/module2/src/main/resources/ApplicationResource_de.propertiesparent/module2/src/main/resources/ApplicationResource_ro.properties
提示
元件發現附加元件使用 Weblate 內部 URL。這是在多個元件之間共享版本控制系統設定的便捷方式。連結的元件使用主元件的本機儲存庫,其設定方法是將 weblate://project/main-component 填入各元件的 原始碼儲存庫 欄位(在 操作 ↓ 設定 ↓ 版本控制系統)。這也節省了設定和系統資源的時間。
提示
用 加入遺漏語言 確保新元件包含完整的可翻譯語言集。
也參考
Fedora 訊息¶
在 5.15 版被加入.
- 附加元件 ID:
weblate.fedora_messaging.publish- 設定:
amqp_urlAMQP broker URL
要連線的 AMQP broker URL。
topic_prefix主題前綴
選填的前綴,用於加在產生的訊息主題前面。
publish_timeout發佈逾時
等待 broker 傳遞確認的秒數。
connection_attempts連線嘗試
嘗試連線至 broker 的次數。
retry_delay重試延遲
兩次連線嘗試之間的等待秒數。
ca_certCA 憑證套件 (PEM)
僅貼上 PEM 憑證區塊;每個區塊都必須以 "-----BEGIN CERTIFICATE-----" 開頭,並以 "-----END CERTIFICATE-----" 結尾。
client_key用戶端私密金鑰 (PEM)
請貼上單一未加密的 PEM 私密金鑰區塊。不支援加密的私密金鑰。
client_cert用戶端憑證 (PEM)
僅貼上以 "-----BEGIN CERTIFICATE-----" 開頭的 PEM 憑證區塊;請勿貼上 "openssl x509 -text" 的輸出。
event_filter要觸發的變更事件
選擇應觸發此附加元件的變更事件。要觸發的變更事件
events選取的變更事件
- 觸發:
傳送通知到相容 Fedora Messaging 的 AMQP exchange。
Fedora Messaging是基於AMQP的發佈者,用於Weblate中發生的所有變化。您可以在使用此操作中掛勾正在發生的變更的其他服務。
訊息主題¶
所有訊息都有主題 weblate.<action>.<project>.<category...>.<component>.<translation>。設定 topic_prefix 後,會以單一句點作為分隔符號,將其加在主題前方,例如 org.fedoraproject.weblate.project_backed_up.website。動作會以小寫英文字詞表示,並以底線而非空格連接,例如 resource_updated;完整的動作辨識碼請參閱 選取的變更事件。其餘部分則符合 Weblate 物件的路徑區段。
例如,website 專案的專案備份事件會使用 weblate.project_backed_up.website。website 專案、frontend 元件及捷克文翻譯中的翻譯變更,會使用 weblate.translation_changed.website.frontend.cs。若 frontend 元件位於 parent 及 child 分類中,相同變更會使用 weblate.translation_changed.website.parent.child.frontend.cs。
訊息本體¶
內容由下列欄位組成(假定事件中有這些欄位):
change_id變更的數字 ID
action變更的詳細名稱。
timestampISO 格式時間戳
target變更的新值(如字串的新翻譯)
old變更前的值(例如字串先前的翻譯)
source來源字串。
url檢視相關物件的絕對 URL。
author作者使用者名稱(例如接受建議時,可能與執行操作的使用者不同)
user執行操作的使用者名稱
project專案 slug
component元件代稱
translation翻譯語言代碼
訊息標頭¶
另有可供路由使用的額外標頭:
action變更的詳細名稱。
project專案 slug
component元件代稱
範例訊息¶
儲存庫合併事件:
{
"id": 1,
"action": "Merged repository",
"timestamp": "2017-06-15T11:30:47.325000+00:00",
"url": "http://example.com/projects/test/test/",
"component": "test"
}
新的來源字串事件:
{
"id": 2,
"action": "New source string",
"timestamp": "2017-06-15T11:30:47.372000+00:00",
"url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
"component": "test",
"translation": "cs",
"source": ["Hello, world!\n"]
}
資源更新事件:
{
"id": 6,
"action": "Resource update",
"timestamp": "2017-06-15T11:30:47.410000+00:00",
"url": "http://example.com/projects/test/test/cs/",
"project": "test",
"component": "test",
"translation": "cs"
}
{
"id": 7,
"action": "Resource update",
"timestamp": "2017-06-15T11:30:47.510000+00:00",
"url": "http://example.com/projects/test/test/de/",
"project": "test",
"component": "test",
"translation": "de"
}
{
"id": 8,
"action": "Resource update",
"timestamp": "2017-06-15T11:30:47.595000+00:00",
"url": "http://example.com/projects/test/test/it/",
"project": "test",
"component": "test",
"translation": "it"
}
專案移除事件:
{
"id": 9,
"action": "Removed project",
"timestamp": "2019-10-17T15:57:08.559420+00:00",
"target": "test",
"user": "testuser"
}
新貢獻者事件:
{
"id": 11,
"action": "New contributor",
"timestamp": "2019-10-17T15:57:08.759960+00:00",
"url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
"author": "testuser",
"user": "testuser",
"project": "test",
"component": "test",
"translation": "cs",
"source": ["Hello, world!\n"]
}
新翻譯事件:
{
"id": 12,
"action": "New translation",
"timestamp": "2019-10-17T15:57:08.772591+00:00",
"url": "http://example.com/translate/test/test/cs/?checksum=6412684aaf018e8e",
"target": ["Ahoj svete!\n"],
"author": "testuser",
"user": "testuser",
"project": "test",
"component": "test",
"translation": "cs",
"source": ["Hello, world!\n"]
}
大量編輯¶
- 附加元件 ID:
weblate.flags.bulk- 設定:
q查詢
state要設定的狀態
可用的選擇:¶ -1不變更
10需要編輯
11需要編輯(需要重新撰寫)
12需要編輯(需要檢查)
20已翻譯
30已核可
add_flags要加入的翻譯旗標
remove_flags要移除的翻譯旗標
add_labels要加入的標籤
remove_labels要移除的標籤
- 觸發:
大量編輯字串的旗標、標籤或狀態。
範例:
搜尋查詢 |
|
|---|---|
要加入的標籤 |
目前 |
搜尋查詢 |
|
|---|---|
要加入的翻譯旗標 |
|
搜尋查詢 |
|
|---|---|
要加入的翻譯旗標 |
|
將未變動的翻譯標記為「需要重新撰寫」¶
- 附加元件 ID:
weblate.flags.same_edit- 設定:
此附加元件無設定。
- 觸發:
每當新的可翻譯字串從 VCS 匯入且符合來源字串時,會在 Weblate 中標記為需要重新撰寫。這對於未翻譯字串有來源字串的檔案格式來說特別有用。
也參考
標記新來源字串為「需要檢查」¶
- 附加元件 ID:
weblate.flags.source_edit- 設定:
此附加元件無設定。
- 觸發:
每當新來源字串由 VCS 匯入時,會在 Weblate 中標記為需要檢查。這樣您可以輕鬆篩選並編輯開發者寫的來源字串。
也參考
將新翻譯標記為「需要重新撰寫」¶
- 附加元件 ID:
weblate.flags.target_edit- 設定:
此附加元件無設定。
- 觸發:
每當新的可翻譯字串從 VCS 匯入時,會在 Weblate 中標記為需要重新撰寫。這樣您可以輕鬆篩選並編輯開發者建立的翻譯。
也參考
將儲存庫中更新的翻譯標記為「需要重新撰寫」¶
- 附加元件 ID:
weblate.flags.target_repo_update- 設定:
此附加元件無設定。
- 觸發:
當版本控制系統中的字串翻譯有變更時,Weblate 會將其標記為需要重新撰寫。這項功能在翻譯檔案經常被手動更新或由外部服務修改的情況下特別實用。
也參考
使用來源填充唯讀字串¶
在 4.18 版被加入.
使用來源字串作為唯讀字串的翻譯填充。
統計資料產生器¶
產生內含翻譯狀態詳細資訊的檔案。
您可以使用 Django 範本在檔案名稱或內容中,參閱: 範本標記 取得更多標記描述細節。
例如為每一個翻譯產生簡介檔案:
- 產生的檔案名稱
locale/{{ language_code }}.json- 內容
{ "language": "{{ language_code }}", "strings": "{{ stats.all }}", "translated": "{{ stats.translated }}", "last_changed": "{{ stats.last_changed }}", "last_author": "{{ stats.last_author }}", }
也參考
將來源預先填充進翻譯¶
在 4.11 版被加入.
用來源字串填充翻譯字串。
元件中的所有未翻譯字串都會填入來源字串,並標記為需要編輯。翻譯檔案不能包含空字串時,請使用此功能。.. AUTOGENERATED START: weblate.generate.pseudolocale .. 此部分由 ./manage.py list_addons 自動產生,請勿手動編輯。
偽語系產生¶
在 4.5 版被加入.
- 附加元件 ID:
weblate.generate.pseudolocale- 設定:
source來源字串
target目標翻譯
本翻譯中的所有字串都將被覆寫
prefix前置靜態文字
var_prefix前置可變文字
suffix後置靜態文字
var_suffix後置可變文字
var_multiplier可變文字乘數
根據來源字串的長度,決定變數文字要重複多少次。
include_readonly包含唯讀字串
- 觸發:
自動為原文字串加上前綴與後綴來產生翻譯。
偽 locale 對於尋找未準備好進行在地化的字串很有用。這是透過修改所有可翻譯的來源字串來達成的,使得在用偽 locale 語言執行應用程式時很容易發現未修改的字串。
發現在地化對應物可能不適合設定的字串也是可能的。
使用可變部分可找出在地化後可能無法容納於使用者介面的字串;此功能會依來源字串長度延伸文字。可變文字會依文字長度乘上倍率重複。例如,Hello world 搭配可變文字 _ 及 1 倍倍率時,會變成 Hello world___________,也就是來源字串中的每個字元都會讓可變文字重複一次。
字串將以下述模式產生:
前置靜態文字 前置變數文字 來源字串 後置變數文字 後置靜態文字
提示
可以使用真正的語言進行檢測,但在 Weblate 中有專用的假語言環境——en_XA 和 ar_XB。
提示
您可以使用這個擴充套件來開始翻譯現有或相似的語言。一旦您加入翻譯到這元件,也將會套用擴充套件。例如:您有 fr 且想加入 fr_CA 翻譯,只需要將 fr 設定來源語言,fr_CA 為目標翻譯,並將前字尾留空。
在填滿新翻譯後解除安裝擴充套件以防止 Weblate 變更複製後的翻譯。
評論中的貢獻者紀錄¶
- 附加元件 ID:
weblate.gettext.authors- 設定:
此附加元件無設定。
- 觸發:
更新 PO 檔案標頭中的評論部分以納入貢獻者姓名及貢獻年份。
PO 檔案頭看上去是這樣的:
# Michal Čihař <michal@weblate.org>, 2012, 2018, 2019, 2020.
# Pavel Borecki <pavel@example.com>, 2018, 2019.
# Filip Hron <filip@example.com>, 2018, 2019.
# anonymous <noreply@weblate.org>, 2019.
更新「configure」檔案中的 ALL_LINGUAS 變數¶
每當新增或移除翻譯時,更新「configure」、「configure.in」或「configure.ac」檔案中的 ALL_LINGUAS 變數。
新增或刪除翻譯時,更新 configure、configure.in 或任何 configure.ac 檔案中的 ALL_LINGUAS 變數。
自訂 gettext 輸出¶
在 5.13 版被移除: 被 檔案格式參數 取代。
更新 gettext 範本(Django)¶
在 5.17 版被加入.
使用 Django 內建的 makemessages 指令更新 gettext 範本。
此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。
選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。
範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。
Django 要求¶
此附加元件需要 xgettext 及 msguniq。它會執行 Weblate 內部的 Django 訊息擷取包裝函式,而非叫用專案的 manage.py makemessages,因此不會載入專案的 Django 設定或應用程式。
新翻譯的範本必須使用 django 或 djangojs 網域。支援的範本名稱為 django.pot、djangojs.pot、django.po 及 djangojs.po。Weblate 會從範本路徑推斷來源目錄,並在擷取時略過儲存庫中的 locale 目錄。
更新 LINGUAS 檔案¶
當新增或移除翻譯時更新 LINGUAS 檔案。
更新 POT 檔案 (Meson)¶
在 5.17 版被加入.
- 附加元件 ID:
weblate.gettext.meson- 設定:
interval更新頻率
當元件重新載入時,附加元件應以何種頻率更新 POT 檔案。
可用的選擇:¶ daily每天
weekly每週
monthly每月
normalize_header標準化 POT 標頭
更新 gettext 標頭並取代 POT 評論佔位字元。
location_mode來源位置
選擇擷取程序如何將來源位置寫入 POT 檔案。可藉此在範本中保留位置,同時省略已翻譯 PO 檔案中的位置資訊。
可用的選擇:¶ file使用檔案格式設定
keep將位置資訊擷取至 POT 檔案
omit不要擷取位置資訊
comment_mode程式碼評論
選擇 xgettext 是不要擷取評論、擷取所有評論,還是只擷取包含特定標籤的評論。
可用的選擇:¶ off不要擷取評論
all擷取所有評論
tagged擷取包含標籤的評論
comment_tag評論標記
在使用標籤評論模式時,傳遞給 xgettext 用於擷取評論的標籤。
checksxgettext 檢查
針對擷取的訊息,要啟用的其他 xgettext 驗證檢查。
可用的選擇:¶ ellipsis-unicodeellipsis-unicode
space-ellipsisspace-ellipsis
quote-unicodequote-unicode
bullet-unicodebullet-unicode
keyword額外關鍵字
選用擇傳遞給 xgettext 的其他關鍵字,使用 --keyword 引數。
keyword_exclusive僅使用關鍵字
啟用後,在額外關鍵字之前,會將不帶值的
--keyword傳給 xgettext,停用所有預設關鍵字,因此只會識別上方指定的關鍵字。presetMeson 預設
內建的 xgettext 引數預設組態,與 Meson 的 gettext 整合功能相符。這個 GLib 預設組態加上了 Meson 的 gettext 輔助程式所使用的關鍵字及格式旗標選項。
可用的選擇:¶ glibGLib
- 觸發:
依照 Meson 的 gettext 慣例更新 gettext 範本。
此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。
選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。
範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。
Meson 要求¶
此附加元件需要 xgettext,但不會叫用 Meson。它會讀取 gettext 目錄中的 POTFILES 或 POTFILES.in,並將 GLib 關鍵字及格式旗標預設傳遞給 xgettext,以遵循 Meson gettext 慣例。
gettext 目錄是包含 新翻譯的範本 中所設範本的目錄。該目錄必須包含 meson.build,以及 POTFILES 或 POTFILES.in。該目錄或其中一個上層目錄必須含有 Meson 專案的 meson.build。若 POTFILES 及 POTFILES.in 同時存在,便會使用 POTFILES。相鄰的 POTFILES.skip 會將其中列出的來源檔案排除在擷取範圍外。
請依現有 Meson gettext 設定來設定此附加元件。在大多數 Meson 專案中,gettext 目錄為 po/、範本以 gettext Domain 命名,而 po/meson.build 會叫用 Meson 的 gettext 輔助程式。請在 新翻譯的範本 中使用相同的範本路徑,例如 po/example.pot,並將 POTFILES 或 POTFILES.in 與該 meson.build 檔案放在一起。
Weblate 不會從 meson.build 讀取來源檔案清單,而會依照 Meson gettext 慣例使用 POTFILES 或 POTFILES.in。Meson 專案使用非預設 gettext 目錄或 Domain 時,請在元件範本路徑中採用相同的目錄結構。
產生 MO 檔案¶
- 附加元件 ID:
weblate.gettext.mo- 設定:
path產生的 MO 檔案路徑
如果未指定,將使用 PO 檔案的位置。
fuzzy包含需要編輯的字串
需要編輯的字串 (fuzzy) 通常無法直接被用為翻譯。
- 觸發:
每次 PO 檔案有變動時便自動產生 MO 檔案。
產生的 MO 檔案位置可以自訂,其欄位使用 範本標記。
備註
如果移除翻譯,其 PO 檔案會從儲存庫刪除,但此附加元件產生的 MO 檔案不會刪除。您必須手動從上游移除 MO 檔案。
更新 PO 檔案以符合 POT (msgmerge)¶
在 5.13 版的變更: 設定 設定已移至 檔案格式參數。
使用 msgmerge 更新所有(在「檔案遮罩」設定的)PO 檔案以跟(在「新翻譯的範本」設定的)POT 檔案同步。
處理 POT 範本檔案有更新(有新字串或現有字串有變更)的 gettext PO 檔案時,該附加元件必不可少。當 POT 檔案在儲存庫中更新時,該附加元件會自動將其變更合併入所有語言的 PO 檔案,確保:
新的可翻譯字串出現在所有語言中
刪除的字串被標記為過時
已修改字串被標記為需要稽核(fuzzy)
多數 msgmerge 指令列選項都可透過檔案格式參數設定。啟用 po_remove_obsolete 參數,即可在儲存 PO 檔案時移除過時的 #~ 項目。
也參考
msgmerge
更新 POT 檔案(Sphinx)¶
在 5.17 版被加入.
- 附加元件 ID:
weblate.gettext.sphinx- 設定:
interval更新頻率
當元件重新載入時,附加元件應以何種頻率更新 POT 檔案。
可用的選擇:¶ daily每天
weekly每週
monthly每月
normalize_header標準化 POT 標頭
更新 gettext 標頭並取代 POT 評論佔位字元。
location_mode來源位置
選擇擷取程序如何將來源位置寫入 POT 檔案。可藉此在範本中保留位置,同時省略已翻譯 PO 檔案中的位置資訊。
可用的選擇:¶ file使用檔案格式設定
keep將位置資訊擷取至 POT 檔案
omit不要擷取位置資訊
filter_mode篩選取
選用擇在 Sphinx 擷取後移除不需要翻譯的字串。
可用的選擇:¶ none無
weblate_docsWeblate 文件
- 觸發:
使用 Sphinx 的 gettext builder 更新 gettext 範本,且不載入專案設定。
此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。
選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。
範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。
Sphinx 要求¶
此附加元件需要由 sphinx 安裝額外項目提供的 sphinx-build。新翻譯的範本必須是 locales 目錄下的 .pot 檔案。locales 的上一層目錄會作為 Sphinx 來源目錄,且必須包含 conf.py。
擷取程序會使用 Weblate 隨附的 Sphinx 設定,不會載入專案設定。Weblate 會執行 Sphinx gettext 建置器、將來源參照正規化為相對於來源目錄的路徑,再將產生的範本複製回已設定的範本路徑。
更新 POT 檔案 (xgettext)¶
在 5.17 版被加入.
- 附加元件 ID:
weblate.gettext.xgettext- 設定:
interval更新頻率
當元件重新載入時,附加元件應以何種頻率更新 POT 檔案。
可用的選擇:¶ daily每天
weekly每週
monthly每月
normalize_header標準化 POT 標頭
更新 gettext 標頭並取代 POT 評論佔位字元。
location_mode來源位置
選擇擷取程序如何將來源位置寫入 POT 檔案。可藉此在範本中保留位置,同時省略已翻譯 PO 檔案中的位置資訊。
可用的選擇:¶ file使用檔案格式設定
keep將位置資訊擷取至 POT 檔案
omit不要擷取位置資訊
comment_mode程式碼評論
選擇 xgettext 是不要擷取評論、擷取所有評論,還是只擷取包含特定標籤的評論。
可用的選擇:¶ off不要擷取評論
all擷取所有評論
tagged擷取包含標籤的評論
comment_tag評論標記
在使用標籤評論模式時,傳遞給 xgettext 用於擷取評論的標籤。
checksxgettext 檢查
針對擷取的訊息,要啟用的其他 xgettext 驗證檢查。
可用的選擇:¶ ellipsis-unicodeellipsis-unicode
space-ellipsisspace-ellipsis
quote-unicodequote-unicode
bullet-unicodebullet-unicode
keyword額外關鍵字
選用擇傳遞給 xgettext 的其他關鍵字,使用 --keyword 引數。
keyword_exclusive僅使用關鍵字
啟用後,在額外關鍵字之前,會將不帶值的
--keyword傳給 xgettext,停用所有預設關鍵字,因此只會識別上方指定的關鍵字。input_mode輸入來源
選擇要讓 xgettext 從 glob 樣式讀取來源檔案,或是從 POTFILES/POTFILES.in 資訊清單檔案讀取。
可用的選擇:¶ patterns來源檔案形式
potfilesPOTFILES 資訊清單
languagexgettext 語言
傳遞給 xgettext 的程式語言,例如 Python 或 C。留空可讓 xgettext 根據副檔名判斷語言。
source_patterns來源檔案形式
以換列符號分隔的儲存庫相對路徑 glob 樣式,用來指定要使用 xgettext 擷取的檔案。
potfiles_pathPOTFILES 路徑
指向 POTFILES 或 POTFILES.in 的儲存庫相對路徑。項目的解析以儲存庫根目錄為基準。若與資訊清單位於同一目錄,POTFILES.skip 會將列出的檔案排除在擷取範圍之外。
- 觸發:
使用 xgettext 針對選取的來源檔案更新 gettext 範本。
此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。
選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。
範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。
xgettext 要求¶
此附加元件需要 xgettext。請設定來源檔案模式,或設定 POTFILES / POTFILES.in 資訊清單。來源檔案模式是相對於儲存庫的 Glob 模式,只有相符的儲存庫檔案會傳遞給 xgettext。
POTFILES 或 POTFILES.in 中的項目會以儲存庫根目錄為基準解析。這些項目必須是相對路徑、位於儲存庫內,且指向現有檔案。空白行及以 # 開頭的行會略過。若資訊清單旁有 POTFILES.skip 檔案,其中的項目會排除在擷取範圍外。
除非變更的檔案符合已設定的來源模式、符合資訊清單中所列檔案、變更受監看資訊清單,或變更附加元件設定,否則會略過自動儲存庫重新整理作業。
設定此附加元件時,請以建置系統的擷取設定為起點。Autotools 專案通常將 gettext 輸入放在 po/POTFILES.in,並將 gettext Domain、xgettext 旗標等選項放在 po/Makevars 或相關 Makefile.am 檔案。當其中的項目是單純的儲存庫相對來源路徑時,請使用具有相同 POTFILES.in 的資訊清單模式,並將相關擷取行為複製到附加元件設定,例如語言、註解擷取、檢查及其他關鍵字。
其他建置系統則應以其現有的來源清單或擷取指令作為依據。CMake、自訂 Makefile、npm 指令碼或專案特定擷取指令碼,通常會直接叫用 xgettext,或產生中繼檔案清單。目錄結構簡單時請設定來源模式;專案維護單純檔案清單時,則使用資訊清單模式。若建置系統資訊清單包含並非檔案路徑的轉換或前置詞,請先轉換為單純的儲存庫相對路徑,再作為 POTFILES 使用。
壓縮 Git 提交¶
- 附加元件 ID:
weblate.git.squash- 設定:
squash提交壓縮
可用的選擇:¶ all所有提交匯併為一
language每個語言
file每個檔案
author每位作者
append_trailers在將多個提交壓縮(squash)為一個提交時,將某些特定的詮釋資料(trailers)附加到最終的提交資訊中
額外資訊的列看起來類似於 RFC 822 電子郵件標頭,位於提交訊息的其他自由格式部分的末尾,例如「Co-authored-by: …」。
commit_message提交訊息
此提交訊息將用來取代從壓縮提交組合而成的提交訊息。
- 觸發:
推送變更前先壓縮 Git 提交。
提示
為了避免不必要的衝突,建議設定透過 webhooks 或 API 自動接收上游變更,見 更新儲存庫。
以下模式之一中,Git提交可以在推送變更之前被壓縮:
所有提交匯併為一
每個語言
每個檔案
每位作者
原始提交說明會保留,但作者資訊會遺失,除非選取 依作者,或自訂提交說明以納入作者資訊。
可以選擇使用自訂提交說明覆蓋原始提交說明。
您可以選擇從原始提交說明移除 trailer(例如 Co-authored-by: … 之類的提交資料列),並附加至壓縮提交說明的結尾。這也會為每位譯者產生適當的 Co-authored-by: 記錄。
自訂 JSON 輸出¶
在 5.12 版的變更: 新增了 分隔符後避免空格 選項。
在 5.13 版被移除: 被 檔案格式參數 取代。
重設儲存庫至上游狀態¶
在 5.17 版被加入.
每晚丟棄 Weblate 儲存庫中所有變更。
格式化 Java properties 檔案¶
- 附加元件 ID:
weblate.properties.sort- 設定:
case_sensitive啟用區分大小寫的字串鍵排序
- 觸發:
格式化並排序 Java properties 檔案。
合併換行至 Unix 版本。
Unicode 跳脫符號的大寫格式(如果有的話)。
替除空白行與評論。
依鍵值排序字串。
移除重複字串。
陳舊評論移除¶
設定移除評論的時間間隔。
這可以用於刪除可能變得過時的陳舊註解。小心使用,因為陳舊的註解不意味著失去了重要性。
陳舊建議移除¶
- 附加元件 ID:
weblate.removal.suggestions- 設定:
age保留的天數
votes投票門檻
移除之最低票數。留空則不論票數一律移除建議。停用投票時,此欄位不會生效。
- 觸發:
設定移除建議的時間間隔。
可與建議投票(參閱 同行評審)結合使用,用於刪除在給定時間內未獲得足夠贊成票的建議。
更新 RESX 檔案¶
更新所有翻譯檔案以符合單語言上游基底檔。未使用的字串將移除,新增加的字串將根據來源字串複製加入。
提示
如果只想刪除陳舊的翻譯鍵,那麼使用 清理翻譯檔案。
Slack Webhooks¶
在 5.12 版被加入.
- 附加元件 ID:
weblate.webhook.slack- 設定:
- 觸發:
根據選擇事件傳送通知到 Slack 頻道。
警告
通知內容可能會顯示 HTML 標籤。這是一個已知問題,很快就會解決;請檢視 https://github.com/WeblateOrg/weblate/issues/15056。
提示
若要取得 Webhook URL,請依照 Slack Incoming Webhooks 說明文件 所列步驟操作。
Webhook¶
在 5.11 版被加入.
在 5.15 版的變更: 現在會驗證 secret 長度是否符合規格。
- 附加元件 ID:
weblate.webhook.webhook- 設定:
- 觸發:
依照 Standard Webhooks 規範,根據選取的事件傳送通知到外部服務。
要求承載內容符合 Weblate Messaging 結構描述。action 欄位會使用 選取的變更事件 所列的動作名稱。OpenAPI 說明也可在 /api/docs/ 找到。要求內容範例:
{
"change_id": 99,
"action": "Translation changed",
"timestamp": "2019-08-24T14:15:22Z",
"target": "Nazdar svete!",
"old": "Nazdar!",
"source": "Hello, world",
"url": "/translate/project-slug/component-slug/cs/?checksum=46add148a53cab6f",
"author": "author-username",
"user": "user-username",
"project": "project-slug",
"component": "component-slug",
"translation": "cs"
}
帶有類別的範例請求內容:
{
"change_id": 8910,
"action": "Component renamed",
"timestamp": "2025-06-11T07:15:09Z",
"target": ["new-name"],
"old": ["component-slug"],
"url": "/projects/project-slug/parent-category/child-category/sub-category/component-slug/",
"user": "testuser",
"project": "project-slug",
"component": "component-slug",
"category": [
"sub-category",
"child-category",
"parent-category"
]
}
範例請求標頭:
{
"webhook-id": "7f1c5477f6275a69af7b83236c20cb1a",
"webhook-timestamp": "1748505623.044281",
"webhook-signature": "v1,Ceo5qEr07ixe2NLpvHk3FH9bwy/WavXrAFQ/9tdO6mc="
}
webhook-signature 是以空格分隔的 HMAC 簽章清單,使用 secret 字串、要求承載內容、webhook-timestamp 及 webhook-id 產生。這可確保 Webhook 要求的真實性及完整性。
提供的 secret 是長度介於 24 位元組 (192 位元) 與 64 位元組 (512 位元) 的 Base64 編碼字串。可加上 whsec_ 前置字串,以便辨識。
若要驗證要求,可以使用 standardwebhooks 程式庫的 Webhook.verify 方法,或「Standard Webhooks Specification」的實作。
過時的附加元件¶
自訂 XML 輸出¶
在 4.15 版被加入.
在 5.13 版被移除: 被 檔案格式參數 取代。
自訂 YAML 輸出¶
在 5.13 版被移除: 被 檔案格式參數 取代。
常見附加元件參數¶
機器翻譯引擎¶
|
Alibaba |
|
Amazon Translate |
|
Anthropic |
|
Apertium APy |
|
Azure AI Translator |
|
Azure OpenAI |
|
Baidu |
|
CyrTranslit |
|
DeepL |
|
Glosbe |
|
Google Cloud Translation Advanced |
|
Google Cloud Translation Basic |
|
LTEngine |
|
LibreTranslate |
|
Mistral |
|
ModernMT |
|
MyMemory |
|
Netease Sight |
|
Ollama |
|
OpenAI |
|
SAP Translation Hub |
|
Systran |
|
Weblate |
|
Weblate 翻譯記憶 |
|
Yandex |
|
Yandex v2 |
|
Youdao Zhiyun |
|
tmserver |
檔案格式¶
|
XLIFF 1.2 附 Apple 擴充功能 |
|
App store 詮釋資料檔案 |
|
ARB 檔案 |
|
Android 字串資源 |
|
AsciiDoc 檔案 |
|
Advanced SubStation Alpha 字幕檔案 |
|
Haiku catkeys |
|
Compose Multiplatform 資源 |
|
CSV 檔案 |
|
多數值 CSV 檔案 |
|
簡易 CSV 檔案 |
|
DokuWiki 文字檔案 |
|
DTD 檔案 |
|
Flat XML 檔案 |
|
Fluent 檔案 |
|
Format.JS JSON 檔案 |
|
go-i18n v1 JSON 檔案 |
|
go-i18n v2 JSON 檔案 |
|
go-i18n TOML 檔案 |
|
gotext JSON 檔案 |
|
GWT 屬性 |
|
HTML 檔案 |
|
i18next JSON 檔案 v3 |
|
i18next JSON 檔案 v4 |
|
IDML 檔案 |
|
INI 檔案 |
|
Inno Setup INI 檔案 |
|
Joomla 語言檔案 |
|
JSON 檔案 |
|
JSON 巢狀結構檔案 |
|
Laravel PHP 字串 |
|
Markdown 檔案 |
|
MDX 檔案 |
|
MediaWiki 文字檔案 |
|
@draggable/i18n 語言檔案 |
|
Mobile Kotlin 資源 |
|
Nextcloud JSON 檔案 |
|
OpenDocument 檔案 |
|
PHP 字串 |
|
XLIFF 1.2 翻譯檔案 |
|
gettext PO 檔案 |
|
gettext PO 檔案(單語言) |
|
XLIFF 1.2 附 gettext 擴充功能 |
|
Java Properties |
|
RC 檔案 |
|
RESJSON 檔案 |
|
ResourceDictionary 檔案 |
|
.NET 資源檔案 |
|
Ruby YAML 檔案 |
|
SubRip 字幕檔案 |
|
SubStation Alpha 字幕檔案 |
|
iOS 字串 |
|
Stringsdict 檔案 |
|
MicroDVD 字幕檔案 |
|
TermBase eXchange 檔案 |
|
TOML 檔案 |
|
Qt Linguist 翻譯檔案 |
|
純文字檔案 |
|
WebExtension JSON 檔案 |
|
WixLocalization 檔案 |
|
包含佔位字串支援的 XLIFF 1.2 |
|
XLIFF 2.0 翻譯檔案 |
|
包含佔位字串支援的 XLIFF 2.0 |
|
Excel Open XML |
|
XWiki 完整頁面 |
|
XWiki Java Properties |
|
XWiki 頁面屬性 |
|
YAML 檔案 |
要觸發的變更事件¶
|
翻譯內容事件 |
|
所有變更事件 |
|
選取的變更事件 |
選取的變更事件¶
下列變更動作可能出現在通知承載內容中。Fedora Messaging 會在訊息主題中使用辨識碼欄,而 Webhook 承載內容會在 action 欄位中使用名稱欄。
ID |
辨識碼 |
名稱 |
描述 |
|---|---|---|---|
|
|
資源已更新 |
翻譯檔案已與其儲存庫同步。 |
|
|
完成了翻譯 |
個別編輯後,某個語言的翻譯已全部完成。自動翻譯、上傳及大量編輯不會觸發此事件。 |
|
|
變更了翻譯 |
使用者編輯了現有翻譯。 |
|
|
新增了評論 |
已在字串中新增評論。 |
|
|
新增了建議 |
已新增翻譯建議。 |
|
|
新增了翻譯 |
使用者翻譯了原本未翻譯的字串。 |
|
|
已自動翻譯 |
自動翻譯新增或變更了翻譯。此事件會取代「新增了翻譯」或「變更了翻譯」。 |
|
|
接受了建議 |
已接受翻譯建議並採用為翻譯。 |
|
|
還原了翻譯 |
翻譯已還原為較早的值。 |
|
|
上傳了翻譯 |
上傳翻譯檔案新增或變更了翻譯。此事件會取代「新增了翻譯」或「變更了翻譯」。 |
|
|
新增了來源 |
已新增來源字串,且不是來自儲存庫或上傳更新。 |
|
|
鎖定了元件 |
已鎖定元件,禁止翻譯。 |
|
|
解除了元件鎖定 |
已解除元件的翻譯鎖定。 |
|
|
已提交變更 |
已提交待處理的元件變更。 |
|
|
已推送變更 |
已將儲存庫變更推送至上游。 |
|
|
已重設儲存庫 |
已將儲存庫重設為上游狀態。 |
|
|
已合併儲存庫 |
已合併上游儲存庫變更。 |
|
|
已 rebase 儲存庫 |
已將儲存庫變更衍合至上游。 |
|
|
儲存庫合併失敗 |
合併上游儲存庫變更失敗。 |
|
|
儲存庫 rebase 失敗 |
衍合儲存庫變更失敗。 |
|
|
解析失敗 |
Weblate 無法解析翻譯檔案。 |
|
|
移除了翻譯 |
已移除一種語言的翻譯。 |
|
|
移除了建議 |
已移除翻譯建議。 |
|
|
取代了翻譯 |
搜尋及取代作業變更了翻譯。此事件會取代「變更了翻譯」。 |
|
|
儲存庫推送失敗 |
無法將儲存庫變更推送至上游。 |
|
|
在清理時移除了建議 |
清理期間已移除廢棄的翻譯建議。 |
|
|
來源字串有變更 |
已在 Weblate 中編輯來源字串。 |
|
|
新增了字串 |
已在 Weblate 中新增字串。 |
|
|
已變更大量狀態 |
已批次變更一或多個字串的翻譯狀態。 |
|
|
已變更可見性 |
已變更專案或元件的可見性。 |
|
|
新增了使用者 |
已授予使用者存取權。 |
|
|
移除了使用者 |
已移除使用者的存取權。 |
|
|
核可了翻譯 |
已在檢閱期間核可翻譯。 |
|
|
標記為需要編輯 |
已將翻譯標記為需要編輯。 |
|
|
移除了元件 |
已移除翻譯元件。 |
|
|
移除了專案 |
已移除翻譯專案。 |
|
|
重新命名了專案 |
已重新命名翻譯專案。 |
|
|
重新命名了元件 |
已重新命名翻譯元件。 |
|
|
移動了元件 |
已在專案中移動元件。 |
|
|
有新貢獻者加入 |
使用者首次對翻譯做出貢獻。 |
|
|
發佈了公告 |
已發佈公告。 |
|
|
觸發了警告 |
已觸發元件警示。 |
|
|
新增了語言 |
已新增一種語言的翻譯。 |
|
|
已請求加入語言 |
使用者申請新增語言。 |
|
|
建立了專案 |
已建立翻譯專案。 |
|
|
建立了元件 |
已建立翻譯元件。 |
|
|
邀請了使用者 |
已邀請使用者加入專案。 |
|
|
收到儲存庫通知 |
Weblate 收到程式碼代管服務傳來的儲存庫通知。 |
|
|
上傳並取代了翻譯檔案 |
已使用上傳的檔案取代翻譯檔案。 |
|
|
已變更授權 |
專案或元件的授權資訊已變更。 |
|
|
已變更貢獻者授權協議 |
已變更貢獻者授權協議。 |
|
|
新增了螢幕擷圖 |
已將螢幕擷圖與字串建立關聯。 |
|
|
上傳了螢幕擷圖 |
已上傳螢幕擷圖。 |
|
|
儲存庫有更新字串 |
從儲存庫同步時變更了字串。 |
|
|
已安裝附加元件 |
已安裝附加元件。 |
|
|
附加元件設定已變更 |
已變更附加元件的設定。 |
|
|
已解除安裝附加元件 |
已解除安裝附加元件。 |
|
|
移除了字串 |
已從翻譯中移除字串。 |
|
|
移除了評論 |
已移除字串評論。 |
|
|
解決了評論 |
已將字串評論標示為已解決。 |
|
|
更新瞭解釋 |
來源字串的說明已更新。 |
|
|
移除了類別 |
已移除元件類別。 |
|
|
重新命名了類別 |
元件類別已重新命名。 |
|
|
移動了類別 |
元件類別已移動。 |
|
|
儲存字串失敗 |
Weblate 無法儲存已變更的字串。 |
|
|
儲存庫有加入字串 |
從儲存庫同步時發現新字串。 |
|
|
上傳的檔案更新了字串 |
處理上傳的檔案時,有一個字串已變更。 |
|
|
上傳的檔案新增了字串 |
處理上傳的檔案時發現新字串。 |
|
|
透過上傳來源更新了翻譯 |
上傳來源檔案後已同步翻譯。 |
|
|
完成了元件翻譯 |
個別編輯後,元件中所有語言的翻譯皆已全部完成。自動翻譯、上傳及大量編輯不會觸發此事件。 |
|
|
套用了強制檢查 |
套用強制檢查後,翻譯已標示為需要編輯。 |
|
|
傳播了變更 |
翻譯編輯已傳遞至另一個相符字串。 |
|
|
檔案已上傳 |
已將檔案上傳至翻譯。 |
|
|
附加標記已更新 |
來源字串的其他旗標已更新。 |
|
|
字型已上傳 |
已上傳字型。 |
|
|
字型已變更 |
上傳的字型已變更。 |
|
|
字型已移除 |
已移除上傳的字型。 |
|
|
已強制同步翻譯 |
已強制將翻譯檔案與儲存庫同步。 |
|
|
已強制重新掃描翻譯 |
已強制重新掃描翻譯檔案以尋找變更。 |
|
|
螢幕擷圖已移除 |
已移除螢幕擷圖。 |
|
|
標籤已新增 |
已為字串新增標籤。 |
|
|
標籤已移除 |
已從字串移除標籤。 |
|
|
儲存庫清理 |
已清理儲存庫工作目錄。 |
|
|
在上傳時新增了來源字串 |
處理上傳的檔案時已新增來源字串。 |
|
|
在儲存庫中新增了來源字串 |
從儲存庫同步時已新增來源字串。 |
|
|
專案已備份 |
已建立專案備份。 |
|
|
專案已還原 |
已從備份還原專案。 |
|
|
元件已還原 |
已從備份還原元件。 |
|
|
使用者編輯已復原 |
已復原使用者選取的所有編輯。 |
|
|
專案設定已變更 |
專案設定已變更。 |
|
|
元件設定已變更 |
元件設定已變更。 |
|
|
使用者存取已變更 |
使用者的存取權限已變更。 |
|
|
工作空間已建立 |
已建立工作空間。 |
|
|
工作空間設定已變更 |
工作空間設定已變更。 |
|
|
專案已移動 |
專案已移入或移出工作空間。 |
|
|
遠端儲存庫已更新 |
遠端儲存庫更新完成。 |
|
|
遠端儲存庫更新失敗 |
更新遠端儲存庫失敗。 |
|
|
警示已關閉 |
已關閉元件警示。 |
|
|
警示已重新開啟 |
元件警示在相關情境變更後重新開啟。 |
自訂附加元件清單¶
附加元件清單由 WEBLATE_ADDONS 進行設定。要新增其他附加元件,只需在這個設定中包含絕對類別名稱即可。
編寫附加元件¶
您也可以編寫自己的附加元件,建立子類別 weblate.addons.base.BaseAddon 來定義附加元件詮釋資料,接著實施 callback 來進行處理。
也參考
從附加元件執行指令稿¶
附加元件還可以用於執行外部指令碼。這曾經整合在 Weblate 中,但現在必須寫一些程式碼將指令碼包裝在附加元件中。
# Copyright © Michal Čihař <michal@weblate.org>
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""Example pre commit script."""
from __future__ import annotations
from typing import ClassVar
from django.utils.translation import gettext_lazy
from weblate.addons.events import AddonEvent
from weblate.addons.scripts import BaseScriptAddon
class ExamplePreAddon(BaseScriptAddon):
# Event used to trigger the script
events: ClassVar[set[AddonEvent]] = {
AddonEvent.EVENT_PRE_COMMIT,
}
# Name of the addon, has to be unique
name = "weblate.example.pre"
# Verbose name and long description
verbose = gettext_lazy("Execute script before commit")
description = gettext_lazy("This add-on executes a script.")
# Script to execute
script = "/bin/true"
# File to add in commit (for pre commit event)
# does not have to be set
add_file = "po/{{ language_code }}.po"
安裝方法請參閱 自訂的品質檢查、附加元件與自動修復。
執行指令碼時,工作目錄會設為指定元件的 VCS 儲存庫根目錄。
此外,可以存取後面的環境參數:
- WL_VCS¶
使用的版本控制系統。
- WL_REPO¶
上游儲存庫 URL。
- WL_PATH¶
版本控制系統儲存庫的絕對路徑。
- WL_BRANCH¶
目前元件設定的儲存庫分支。
- WL_FILEMASK¶
目前元件的檔案遮罩。
- WL_TEMPLATE¶
單語言翻譯範本的檔案名稱(可以為空)。
- WL_NEW_BASE¶
建立新的翻譯所使用檔案的檔案名稱(可以為空)。
- WL_FILE_FORMAT¶
在目前專案中使用的檔案格式。
- WL_LANGUAGE¶
目前處理的翻譯的語言(對於元件層級的掛勾不可用)。
- WL_PREVIOUS_HEAD¶
更新後的上個 HEAD (僅在執行更新後掛勾後可用)。
- WL_COMPONENT_SLUG¶
元件代稱用於建構 URL。
- WL_PROJECT_SLUG¶
用於建構 URL 的專案代稱。
- WL_COMPONENT_NAME¶
元件名稱。
- WL_PROJECT_NAME¶
專案名稱。
- WL_COMPONENT_URL¶
元件 URL。
- WL_ENGAGE_URL¶
專案參與 URL。
也參考
更新後儲存庫處理¶
可用於在 VCS 上游來源變更時更新翻譯檔案。為了達成這個功能,請記住 Weblate 只能看到提交給版本控制系統的檔案,所以您需要將變更作為指令碼的一部分提交。
例如,使用 Gulp 時可採用下列程式碼:
#! /bin/sh
gulp --gulpfile gulp-i18n-extract.js
git commit -m 'Update source strings' src/languages/en.lang.json
Pre-commit 翻譯處理¶
在將翻譯提交到儲存庫之前,使用提交指令稿自動變更翻譯。
它作為組成目前翻譯檔案名稱的單一參數而透過。
附加元件活動紀錄¶
附加元件活動記錄會記載附加元件的執行情況,可用於追蹤附加元件活動。
每筆記錄都會記載處理狀態為待處理、成功、失敗或已略過。已略過的記錄會包含附加元件未執行的原因,例如元件不相容、沒有相關變更,或設定的排程尚未到執行時間。成功的記錄仍可能只表示附加元件已檢查輸入內容,但沒有發現任何需要變更的項目。
對於作用於整個範圍、且會個別處理元件的附加元件,活動記錄會包含每個元件各自的一筆記錄。
可以在一定時間間隔後清除記錄,方法是設定 ADDON_ACTIVITY_LOG_EXPIRY。