附加元件

附加元件提供了自訂和自動化翻譯工作流程的方法。管理員可以從每個相應翻譯專案或元件的 操作附加元件 選單新增和管理附加元件。也可以在 管理介面 中進行全站範圍的附加元件安裝。

提示

您也可以使用 APIDEFAULT_ADDONSinstall_addon 來設定附加元件。

選擇支援手動觸發的附加元件,可從附加元件管理頁面或透過 API 執行。執行結果會記錄在附加元件活動記錄中。

../_images/addons.webp

觸發附加元件的事件

附加元件安裝

安裝附加元件時觸發。

元件更新

每當元件發生變化時觸發,例如:

  • 儲存庫中的字串發生變更。

  • 新增了新字串

  • 新增了新翻譯。

每天

每天觸發,但附加元件通常會依 BACKGROUND_TASKS 將每日負載分散至不同元件。

事件變更

變更事件建立後觸發。

手動觸發

當從附加元件管理或 API 手動執行附加元件時觸發。

儲存庫新增後

新增翻譯並提交後立即觸發。

儲存庫提交後

提交變更後立即觸發。

儲存庫推送後

將儲存庫推送至上游後立即觸發。

儲存庫移除後

刪除翻譯後立即觸發。

儲存庫更新後

每當從上游儲存庫拉取新變更時觸發。

儲存庫提交前

提交變更前觸發。

儲存庫推送前

將儲存庫推送至上游前觸發。

儲存庫更新前

嘗試更新儲存庫前觸發。

單元儲存後

儲存字串後立即觸發。

單元同步後

字串與 VCS 同步後觸發。

單元建立前

儲存新建立的字串後立即觸發。

內建附加元件

自動翻譯

附加元件 ID:

weblate.autotranslate.autotranslate

設定:

mode

自動翻譯模式

可用的選擇:

suggest

新增為建議

translate

新增為翻譯

fuzzy

加入並標為「需要編輯」

q

查詢

請注意:翻譯所有字串會捨棄所有現有翻譯。

auto_source

自動翻譯的來源

可用的選擇:

others

其他翻譯元件

mt

機器翻譯

component

元件

輸入要用作來源的元件 slug。留空則使用本專案的所有元件。

engines

機器翻譯引擎

機器翻譯引擎

threshold

分數門檻

觸發:

附加元件安裝, 元件更新, 每天, 事件變更

使用機器翻譯或其他元件來自動翻譯字串。

JavaScript 在地化 CDN

在 4.2 版被加入.

附加元件 ID:

weblate.cdn.cdnjs

設定:

threshold

最低翻譯數

翻譯字串必須達到的百分比,才能納入翻譯。

css_selector

CSS 選擇器

用來偵測可在地化元素的 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 版被加入.

附加元件 ID:

weblate.cdn.files

設定:

此附加元件無設定。

觸發:

附加元件安裝, 元件更新, 儲存庫提交後, 儲存庫移除後, 儲存庫更新後

將翻譯檔案發佈到內容傳遞網路。

發佈翻譯檔案而不轉換為其他格式。檔案會寫入附加元件專用 CDN 目錄下,並從 LOCALIZE_CDN_URL/<add-on UUID>/ 提供。單檔翻譯會使用語言代碼及原始副檔名,例如 cs.jsonde.po。多檔翻譯則會在語言代碼目錄下,依相對於翻譯目錄的路徑提供。單語元件包含來源語言檔案,雙語元件則只發佈目標語言檔案。如需安全提供檔案的指引,請參閱 在地化 CDN

移除空白字串

在 4.4 版被加入.

附加元件 ID:

weblate.cleanup.blank

設定:

此附加元件無設定。

觸發:

附加元件安裝, 儲存庫提交後, 儲存庫更新後

從翻譯檔案中移除沒有翻譯的字串。

使用此方法可以使翻譯檔案中不存在任何空字串(例如,如果您的在地化函式庫將它們顯示為缺失,而不是退回到來源字串)。

清理翻譯檔案

附加元件 ID:

weblate.cleanup.generic

設定:

此附加元件無設定。

觸發:

附加元件安裝, 儲存庫更新後, 儲存庫提交前

更新所有翻譯檔案以符合單語言基礎檔。對大多數檔案格式而言,這代表會移除基礎檔中不再存在的失時效翻譯金鑰。

對於除翻譯字串外還含有其他內容的格式(例如 HTML 檔案Windows RC 檔案OpenDocument 格式),此功能也會使翻譯檔案與基礎檔案保持同步。

若只需對單一翻譯檔案執行一次性清理,請在該翻譯的 儲存庫維護 中使用 清理未使用項目,不必安裝附加元件。

加入遺漏語言

附加元件 ID:

weblate.consistency.languages

設定:

此附加元件無設定。

觸發:

附加元件安裝, 每天, 儲存庫新增後

確保對一個專案內所有元件使用一致的一組語言。

備註

從其他專案分享的元件不會納入此處理。

每隔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

移除無相關檔案的元件

觸發:

附加元件安裝, 儲存庫更新後

根據版本控制系統中的檔案變更自動加入或移除專案元件。

比對會使用正規表示式,因此能進行複雜設定,但需要具備一些相關知識。用來比對翻譯檔案的正規表示式必須包含兩個具名群組,以比對元件及語言;所有正規表示式具名群組都可在範本欄位中作為變數使用。

探索需求

若要成功找到元件,設定必須完成下列所有項目:

  • 正規表示式必須定義 componentlanguage 命名組。

  • 用來命名或找出各元件檔案的範本欄位必須包含 {{ component }},使轉譯後的值確實會隨找到的元件而變更。

  • 對於單語格式,元件必須包含符合 base_file_template 的檔案,以及至少一個符合 match 的翻譯檔案。

完整範例:news_<lang>.md

這是常見的以檔名為基礎之語言變體設定:

  • docs/news_en.md

  • docs/news_cs.md

  • docs/guide_en.md

請先使用 以檔名為基礎的語言變體 預設集,再選取相符的檔案格式,並檢閱已填入的值。

正規表達式:

(?:(?P<path>.*/))?(?P<component>.+?)_(?P<language>[A-Za-z]{2,3}(?:[_-][A-Za-z0-9]+)*)\.(?P<extension>[^/.]+)

元件名稱:

{{ component }}

找到的檔案遮罩:
  • docs/news_*.md

  • docs/guide_*.md

在此範例中,{{ component }} 會解析為語言字尾前的基本名稱,因此 docs/news_en.mddocs/news_pt_BR.mddocs/news_pt-BR.md 都會成為 news 元件。

您可以在所有檔名欄位中使用 Django 範本標記,例如:

{{ component }}

component 比對群組剖析出的元件名稱

{{ component|title }}

元件檔案名稱首字母大寫

{{ path }}: {{ component }}

正規表示式中的自訂比對群組

一旦點選了 Save,將顯示相符元件的預覽,可以檢查設定是否相符於自己的需要:

../_images/addon-discovery.webp

元件探索範例

上述完整範例涵蓋最常見的以檔名為基礎之變體設定。下列範例顯示其他可比對的儲存庫結構。

每個語言一個資料夾

各語言各一個資料夾包含元件的翻譯檔案。

正規表達式:

(?P<language>[^/.]*)/(?P<component>[^/]*)\.po

符合的檔案:
  • cs/application.po

  • cs/website.po

  • de/application.po

  • de/website.po

Gettext 語系結構

儲存 gettext PO 檔案的常用結構。

正規表達式:

locale/(?P<language>[^/.]*)/LC_MESSAGES/(?P<component>[^/]*)\.po

符合的檔案:
  • locale/cs/LC_MESSAGES/application.po

  • locale/cs/LC_MESSAGES/website.po

  • locale/de/LC_MESSAGES/application.po

  • locale/de/LC_MESSAGES/website.po

複雜的檔案名稱

檔案名稱同時使用元件名稱和語言名稱。

正規表達式:

src/locale/(?P<component>[^/]*)\.(?P<language>[^/.]*)\.po

符合的檔案:
  • src/locale/application.cs.po

  • src/locale/website.cs.po

  • src/locale/application.de.po

  • src/locale/website.de.po

重複的語言代碼

路徑和檔案名稱中都使用語言名稱。

正規表達式:

locale/(?P<language>[^/.]*)/(?P<component>[^/]*)/(?P=language)\.po

符合的檔案:
  • locale/cs/application/cs.po

  • locale/cs/website/cs.po

  • locale/de/application/de.po

  • locale/de/website/de.po

分離 Android 字串

Android 資來源字串,切分為多份檔案。

正規表達式:

res/values-(?P<language>[^/.]*)/strings-(?P<component>[^/]*)\.xml

符合的檔案:
  • res/values-cs/strings-about.xml

  • res/values-cs/strings-help.xml

  • res/values-de/strings-about.xml

  • res/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.properties

  • parent/module1/submodule/src/main/resources/ApplicationResource_es.properties

  • parent/module2/src/main/resources/ApplicationResource_de.properties

  • parent/module2/src/main/resources/ApplicationResource_ro.properties

提示

元件發現附加元件使用 Weblate 內部 URL。這是在多個元件之間共享版本控制系統設定的便捷方式。連結的元件使用主元件的本機儲存庫,其設定方法是將 weblate://project/main-component 填入各元件的 原始碼儲存庫 欄位(在 操作設定版本控制系統)。這也節省了設定和系統資源的時間。

提示

加入遺漏語言 確保新元件包含完整的可翻譯語言集。

Fedora 訊息

在 5.15 版被加入.

附加元件 ID:

weblate.fedora_messaging.publish

設定:

amqp_url

AMQP broker URL

要連線的 AMQP broker URL。

topic_prefix

主題前綴

選填的前綴,用於加在產生的訊息主題前面。

publish_timeout

發佈逾時

等待 broker 傳遞確認的秒數。

connection_attempts

連線嘗試

嘗試連線至 broker 的次數。

retry_delay

重試延遲

兩次連線嘗試之間的等待秒數。

ca_cert

CA 憑證套件 (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.websitewebsite 專案、frontend 元件及捷克文翻譯中的翻譯變更,會使用 weblate.translation_changed.website.frontend.cs。若 frontend 元件位於 parentchild 分類中,相同變更會使用 weblate.translation_changed.website.parent.child.frontend.cs

訊息本體

內容由下列欄位組成(假定事件中有這些欄位):

change_id

變更的數字 ID

action

變更的詳細名稱。

timestamp

ISO 格式時間戳

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

要移除的標籤

觸發:

附加元件安裝, 元件更新

大量編輯字串的旗標、標籤或狀態。

範例:

自動標籤於新字串

搜尋查詢

NOT has:label

要加入的標籤

目前

App store 詮釋資料檔案 所有更新日誌字串標記為唯讀

搜尋查詢

language:en AND key:changelogs/

要加入的翻譯旗標

read-only

將特定字串標記為唯讀

搜尋查詢

source:r"^\`\`[.a-zA-Z0-9_-]*\`\`$" AND language:en

要加入的翻譯旗標

read-only

將未變動的翻譯標記為「需要重新撰寫」

附加元件 ID:

weblate.flags.same_edit

設定:

此附加元件無設定。

觸發:

單元建立前

每當新的可翻譯字串從 VCS 匯入且符合來源字串時,會在 Weblate 中標記為需要重新撰寫。這對於未翻譯字串有來源字串的檔案格式來說特別有用。

提示

您或許也想要加強 未變更的翻譯 的檢查透過加入 strict-same 標記到 翻譯旗標 中。

也參考

翻譯狀態

標記新來源字串為「需要檢查」

附加元件 ID:

weblate.flags.source_edit

設定:

此附加元件無設定。

觸發:

單元建立前

每當新來源字串由 VCS 匯入時,會在 Weblate 中標記為需要檢查。這樣您可以輕鬆篩選並編輯開發者寫的來源字串。

也參考

翻譯狀態

將新翻譯標記為「需要重新撰寫」

附加元件 ID:

weblate.flags.target_edit

設定:

此附加元件無設定。

觸發:

單元建立前

每當新的可翻譯字串從 VCS 匯入時,會在 Weblate 中標記為需要重新撰寫。這樣您可以輕鬆篩選並編輯開發者建立的翻譯。

也參考

翻譯狀態

將儲存庫中更新的翻譯標記為「需要重新撰寫」

附加元件 ID:

weblate.flags.target_repo_update

設定:

此附加元件無設定。

觸發:

單元同步後

當版本控制系統中的字串翻譯有變更時,Weblate 會將其標記為需要重新撰寫。這項功能在翻譯檔案經常被手動更新或由外部服務修改的情況下特別實用。

也參考

翻譯狀態

使用來源填充唯讀字串

在 4.18 版被加入.

附加元件 ID:

weblate.generate.fill_read_only

設定:

此附加元件無設定。

觸發:

附加元件安裝, 元件更新, 每天

使用來源字串作為唯讀字串的翻譯填充。

統計資料產生器

附加元件 ID:

weblate.generate.generate

設定:

filename

產生的檔案名稱

template

產生的檔案內容

觸發:

附加元件安裝, 儲存庫提交前

產生內含翻譯狀態詳細資訊的檔案。

您可以使用 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 版被加入.

附加元件 ID:

weblate.generate.prefill

設定:

此附加元件無設定。

觸發:

附加元件安裝, 元件更新, 每天

用來源字串填充翻譯字串。

元件中的所有未翻譯字串都會填入來源字串,並標記為需要編輯。翻譯檔案不能包含空字串時,請使用此功能。.. 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_XAar_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 變數

附加元件 ID:

weblate.gettext.configure

設定:

此附加元件無設定。

觸發:

附加元件安裝, 每天, 儲存庫新增後, 儲存庫移除後

每當新增或移除翻譯時,更新「configure」、「configure.in」或「configure.ac」檔案中的 ALL_LINGUAS 變數。

新增或刪除翻譯時,更新 configureconfigure.in 或任何 configure.ac 檔案中的 ALL_LINGUAS 變數。

自訂 gettext 輸出

在 5.13 版被移除: 檔案格式參數 取代。

更新 gettext 範本(Django)

在 5.17 版被加入.

附加元件 ID:

weblate.gettext.django

設定:

interval

更新頻率

當元件重新載入時,附加元件應以何種頻率更新 POT 檔案。

可用的選擇:

daily

每天

weekly

每週

monthly

每月

normalize_header

標準化 POT 標頭

更新 gettext 標頭並取代 POT 評論佔位字元。

location_mode

來源位置

選擇擷取程序如何將來源位置寫入 POT 檔案。可藉此在範本中保留位置,同時省略已翻譯 PO 檔案中的位置資訊。

可用的選擇:

file

使用檔案格式設定

keep

將位置資訊擷取至 POT 檔案

omit

不要擷取位置資訊

觸發:

附加元件安裝, 手動觸發, 儲存庫更新後

使用 Django 內建的 makemessages 指令更新 gettext 範本。

此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。

選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。

範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。

Django 要求

此附加元件需要 xgettextmsguniq。它會執行 Weblate 內部的 Django 訊息擷取包裝函式,而非叫用專案的 manage.py makemessages,因此不會載入專案的 Django 設定或應用程式。

新翻譯的範本必須使用 djangodjangojs 網域。支援的範本名稱為 django.potdjangojs.potdjango.podjangojs.po。Weblate 會從範本路徑推斷來源目錄,並在擷取時略過儲存庫中的 locale 目錄。

更新 LINGUAS 檔案

附加元件 ID:

weblate.gettext.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 用於擷取評論的標籤。

checks

xgettext 檢查

針對擷取的訊息,要啟用的其他 xgettext 驗證檢查。

可用的選擇:

ellipsis-unicode

ellipsis-unicode

space-ellipsis

space-ellipsis

quote-unicode

quote-unicode

bullet-unicode

bullet-unicode

keyword

額外關鍵字

選用擇傳遞給 xgettext 的其他關鍵字,使用 --keyword 引數。

keyword_exclusive

僅使用關鍵字

啟用後,在額外關鍵字之前,會將不帶值的 --keyword 傳給 xgettext,停用所有預設關鍵字,因此只會識別上方指定的關鍵字。

preset

Meson 預設

內建的 xgettext 引數預設組態,與 Meson 的 gettext 整合功能相符。這個 GLib 預設組態加上了 Meson 的 gettext 輔助程式所使用的關鍵字及格式旗標選項。

可用的選擇:

glib

GLib

觸發:

附加元件安裝, 手動觸發, 儲存庫更新後

依照 Meson 的 gettext 慣例更新 gettext 範本。

此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。

選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。

範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。

Meson 要求

此附加元件需要 xgettext,但不會叫用 Meson。它會讀取 gettext 目錄中的 POTFILESPOTFILES.in,並將 GLib 關鍵字及格式旗標預設傳遞給 xgettext,以遵循 Meson gettext 慣例。

gettext 目錄是包含 新翻譯的範本 中所設範本的目錄。該目錄必須包含 meson.build,以及 POTFILESPOTFILES.in。該目錄或其中一個上層目錄必須含有 Meson 專案的 meson.build。若 POTFILESPOTFILES.in 同時存在,便會使用 POTFILES。相鄰的 POTFILES.skip 會將其中列出的來源檔案排除在擷取範圍外。

請依現有 Meson gettext 設定來設定此附加元件。在大多數 Meson 專案中,gettext 目錄為 po/、範本以 gettext Domain 命名,而 po/meson.build 會叫用 Meson 的 gettext 輔助程式。請在 新翻譯的範本 中使用相同的範本路徑,例如 po/example.pot,並將 POTFILESPOTFILES.in 與該 meson.build 檔案放在一起。

Weblate 不會從 meson.build 讀取來源檔案清單,而會依照 Meson gettext 慣例使用 POTFILESPOTFILES.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 版的變更: 設定 設定已移至 檔案格式參數

附加元件 ID:

weblate.gettext.msgmerge

設定:

此附加元件無設定。

觸發:

附加元件安裝, 儲存庫更新後

使用 msgmerge 更新所有(在「檔案遮罩」設定的)PO 檔案以跟(在「新翻譯的範本」設定的)POT 檔案同步。

處理 POT 範本檔案有更新(有新字串或現有字串有變更)的 gettext PO 檔案時,該附加元件必不可少。當 POT 檔案在儲存庫中更新時,該附加元件會自動將其變更合併入所有語言的 PO 檔案,確保:

  • 新的可翻譯字串出現在所有語言中

  • 刪除的字串被標記為過時

  • 已修改字串被標記為需要稽核(fuzzy)

多數 msgmerge 指令列選項都可透過檔案格式參數設定。啟用 po_remove_obsolete 參數,即可在儲存 PO 檔案時移除過時的 #~ 項目。

更新 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_docs

Weblate 文件

觸發:

附加元件安裝, 手動觸發, 儲存庫更新後

使用 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 用於擷取評論的標籤。

checks

xgettext 檢查

針對擷取的訊息,要啟用的其他 xgettext 驗證檢查。

可用的選擇:

ellipsis-unicode

ellipsis-unicode

space-ellipsis

space-ellipsis

quote-unicode

quote-unicode

bullet-unicode

bullet-unicode

keyword

額外關鍵字

選用擇傳遞給 xgettext 的其他關鍵字,使用 --keyword 引數。

keyword_exclusive

僅使用關鍵字

啟用後,在額外關鍵字之前,會將不帶值的 --keyword 傳給 xgettext,停用所有預設關鍵字,因此只會識別上方指定的關鍵字。

input_mode

輸入來源

選擇要讓 xgettext 從 glob 樣式讀取來源檔案,或是從 POTFILES/POTFILES.in 資訊清單檔案讀取。

可用的選擇:

patterns

來源檔案形式

potfiles

POTFILES 資訊清單

language

xgettext 語言

傳遞給 xgettext 的程式語言,例如 Python 或 C。留空可讓 xgettext 根據副檔名判斷語言。

source_patterns

來源檔案形式

以換列符號分隔的儲存庫相對路徑 glob 樣式,用來指定要使用 xgettext 擷取的檔案。

potfiles_path

POTFILES 路徑

指向 POTFILES 或 POTFILES.in 的儲存庫相對路徑。項目的解析以儲存庫根目錄為基準。若與資訊清單位於同一目錄,POTFILES.skip 會將列出的檔案排除在擷取範圍之外。

觸發:

附加元件安裝, 手動觸發, 儲存庫更新後

使用 xgettext 針對選取的來源檔案更新 gettext 範本。

此附加元件會更新 新翻譯的範本 中設定的範本。它適用於 gettext PO 元件,且元件必須定義新翻譯所用的範本。

選取的更新頻率會套用至儲存庫重新整理後的自動執行。安裝或重新設定附加元件時會立即執行,從附加元件管理或 API 手動執行時也會略過頻率排程。成功更新後,Weblate 會提交變更後的範本並重新載入來源字串。

範本更新本身不會更新翻譯 PO 檔案。翻譯檔案需要自動跟隨範本變更時,請保持安裝 更新 PO 檔案以符合 POT (msgmerge)。此附加元件的安裝表單可一併安裝該附加元件,但現有附加元件的設定不會再次顯示該安裝選項。

xgettext 要求

此附加元件需要 xgettext。請設定來源檔案模式,或設定 POTFILES / POTFILES.in 資訊清單。來源檔案模式是相對於儲存庫的 Glob 模式,只有相符的儲存庫檔案會傳遞給 xgettext

POTFILESPOTFILES.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 版被加入.

附加元件 ID:

weblate.hosted.reset

設定:

此附加元件無設定。

觸發:

附加元件安裝每天

每晚丟棄 Weblate 儲存庫中所有變更。

格式化 Java properties 檔案

附加元件 ID:

weblate.properties.sort

設定:

case_sensitive

啟用區分大小寫的字串鍵排序

觸發:

儲存庫提交前

格式化並排序 Java properties 檔案。

  • 合併換行至 Unix 版本。

  • Unicode 跳脫符號的大寫格式(如果有的話)。

  • 替除空白行與評論。

  • 依鍵值排序字串。

  • 移除重複字串。

陳舊評論移除

附加元件 ID:

weblate.removal.comments

設定:

age

保留的天數

觸發:

附加元件安裝每天

設定移除評論的時間間隔。

這可以用於刪除可能變得過時的陳舊註解。小心使用,因為陳舊的註解不意味著失去了重要性。

陳舊建議移除

附加元件 ID:

weblate.removal.suggestions

設定:

age

保留的天數

votes

投票門檻

移除之最低票數。留空則不論票數一律移除建議。停用投票時,此欄位不會生效。

觸發:

附加元件安裝每天

設定移除建議的時間間隔。

可與建議投票(參閱 同行評審)結合使用,用於刪除在給定時間內未獲得足夠贊成票的建議。

更新 RESX 檔案

附加元件 ID:

weblate.resx.update

設定:

此附加元件無設定。

觸發:

附加元件安裝, 儲存庫更新後

更新所有翻譯檔案以符合單語言上游基底檔。未使用的字串將移除,新增加的字串將根據來源字串複製加入。

提示

如果只想刪除陳舊的翻譯鍵,那麼使用 清理翻譯檔案

Slack Webhooks

在 5.12 版被加入.

附加元件 ID:

weblate.webhook.slack

設定:

webhook_url

Webhook URL

event_filter

要觸發的變更事件

選擇應觸發此附加元件的變更事件。要觸發的變更事件

events

選取的變更事件

選取的變更事件

觸發:

事件變更

根據選擇事件傳送通知到 Slack 頻道。

警告

通知內容可能會顯示 HTML 標籤。這是一個已知問題,很快就會解決;請檢視 https://github.com/WeblateOrg/weblate/issues/15056

提示

若要取得 Webhook URL,請依照 Slack Incoming Webhooks 說明文件 所列步驟操作。

Webhook

在 5.11 版被加入.

在 5.15 版的變更: 現在會驗證 secret 長度是否符合規格。

附加元件 ID:

weblate.webhook.webhook

設定:

webhook_url

Webhook URL

secret

Webhook 秘密

標準 Webhook 秘密是個 base64 編碼的字串。

event_filter

要觸發的變更事件

選擇應觸發此附加元件的變更事件。要觸發的變更事件

events

選取的變更事件

選取的變更事件

觸發:

事件變更

依照 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-timestampwebhook-id 產生。這可確保 Webhook 要求的真實性及完整性。

提供的 secret 是長度介於 24 位元組 (192 位元) 與 64 位元組 (512 位元) 的 Base64 編碼字串。可加上 whsec_ 前置字串,以便辨識。

若要驗證要求,可以使用 standardwebhooks 程式庫的 Webhook.verify 方法,或「Standard Webhooks Specification」的實作。

過時的附加元件

自訂 XML 輸出

在 4.15 版被加入.

在 5.13 版被移除: 檔案格式參數 取代。

自訂 YAML 輸出

在 5.13 版被移除: 檔案格式參數 取代。

常見附加元件參數

機器翻譯引擎

可用的選擇:

alibaba

Alibaba

aws

Amazon Translate

anthropic

Anthropic

apertium-apy

Apertium APy

microsoft-translator

Azure AI Translator

azure-openai

Azure OpenAI

baidu

Baidu

cyrtranslit

CyrTranslit

deepl

DeepL

glosbe

Glosbe

google-translate-api-v3

Google Cloud Translation Advanced

google-translate

Google Cloud Translation Basic

ltengine

LTEngine

libretranslate

LibreTranslate

mistral

Mistral

modernmt

ModernMT

mymemory

MyMemory

netease-sight

Netease Sight

ollama

Ollama

openai

OpenAI

sap-translation-hub

SAP Translation Hub

systran

Systran

weblate

Weblate

weblate-translation-memory

Weblate 翻譯記憶

yandex

Yandex

yandex-v2

Yandex v2

youdao-zhiyun

Youdao Zhiyun

tmserver

tmserver

檔案格式

可用的選擇:

apple-xliff

XLIFF 1.2 附 Apple 擴充功能

appstore

App store 詮釋資料檔案

arb

ARB 檔案

aresource

Android 字串資源

asciidoc

AsciiDoc 檔案

ass

Advanced SubStation Alpha 字幕檔案

catkeys

Haiku catkeys

cmp-resource

Compose Multiplatform 資源

csv

CSV 檔案

csv-multi

多數值 CSV 檔案

csv-simple

簡易 CSV 檔案

dokuwiki

DokuWiki 文字檔案

dtd

DTD 檔案

flatxml

Flat XML 檔案

fluent

Fluent 檔案

formatjs

Format.JS JSON 檔案

go-i18n-json

go-i18n v1 JSON 檔案

go-i18n-json-v2

go-i18n v2 JSON 檔案

go-i18n-toml

go-i18n TOML 檔案

gotext

gotext JSON 檔案

gwt

GWT 屬性

html

HTML 檔案

i18next

i18next JSON 檔案 v3

i18nextv4

i18next JSON 檔案 v4

idml

IDML 檔案

ini

INI 檔案

islu

Inno Setup INI 檔案

joomla

Joomla 語言檔案

json

JSON 檔案

json-nested

JSON 巢狀結構檔案

laravel

Laravel PHP 字串

markdown

Markdown 檔案

mdx

MDX 檔案

mediawiki

MediaWiki 文字檔案

mi18n-lang

@draggable/i18n 語言檔案

moko-resource

Mobile Kotlin 資源

nextcloud-json

Nextcloud JSON 檔案

odf

OpenDocument 檔案

php

PHP 字串

plainxliff

XLIFF 1.2 翻譯檔案

po

gettext PO 檔案

po-mono

gettext PO 檔案(單語言)

poxliff

XLIFF 1.2 附 gettext 擴充功能

properties

Java Properties

rc

RC 檔案

resjson

RESJSON 檔案

resourcedictionary

ResourceDictionary 檔案

resx

.NET 資源檔案

ruby-yaml

Ruby YAML 檔案

srt

SubRip 字幕檔案

ssa

SubStation Alpha 字幕檔案

strings

iOS 字串

stringsdict

Stringsdict 檔案

sub

MicroDVD 字幕檔案

tbx

TermBase eXchange 檔案

toml

TOML 檔案

ts

Qt Linguist 翻譯檔案

txt

純文字檔案

webextension

WebExtension JSON 檔案

wxl

WixLocalization 檔案

xliff

包含佔位字串支援的 XLIFF 1.2

xliff2

XLIFF 2.0 翻譯檔案

xliff2-placeables

包含佔位字串支援的 XLIFF 2.0

xlsx

Excel Open XML

xwiki-fullpage

XWiki 完整頁面

xwiki-java-properties

XWiki Java Properties

xwiki-page-properties

XWiki 頁面屬性

yaml

YAML 檔案

要觸發的變更事件

可用的選擇:

content

翻譯內容事件

all

所有變更事件

custom

選取的變更事件

選取的變更事件

下列變更動作可能出現在通知承載內容中。Fedora Messaging 會在訊息主題中使用辨識碼欄,而 Webhook 承載內容會在 action 欄位中使用名稱欄。

可用的選擇:

ID

辨識碼

名稱

描述

0

resource_updated

資源已更新

翻譯檔案已與其儲存庫同步。

1

translation_completed

完成了翻譯

個別編輯後,某個語言的翻譯已全部完成。自動翻譯、上傳及大量編輯不會觸發此事件。

2

translation_changed

變更了翻譯

使用者編輯了現有翻譯。

3

comment_added

新增了評論

已在字串中新增評論。

4

suggestion_added

新增了建議

已新增翻譯建議。

5

translation_added

新增了翻譯

使用者翻譯了原本未翻譯的字串。

6

automatically_translated

已自動翻譯

自動翻譯新增或變更了翻譯。此事件會取代「新增了翻譯」或「變更了翻譯」。

7

suggestion_accepted

接受了建議

已接受翻譯建議並採用為翻譯。

8

translation_reverted

還原了翻譯

翻譯已還原為較早的值。

9

translation_uploaded

上傳了翻譯

上傳翻譯檔案新增或變更了翻譯。此事件會取代「新增了翻譯」或「變更了翻譯」。

13

source_string_added

新增了來源

已新增來源字串,且不是來自儲存庫或上傳更新。

14

component_locked

鎖定了元件

已鎖定元件,禁止翻譯。

15

component_unlocked

解除了元件鎖定

已解除元件的翻譯鎖定。

17

changes_committed

已提交變更

已提交待處理的元件變更。

18

changes_pushed

已推送變更

已將儲存庫變更推送至上游。

19

repository_reset

已重設儲存庫

已將儲存庫重設為上游狀態。

20

repository_merged

已合併儲存庫

已合併上游儲存庫變更。

21

repository_rebased

已 rebase 儲存庫

已將儲存庫變更衍合至上游。

22

repository_merge_failed

儲存庫合併失敗

合併上游儲存庫變更失敗。

23

repository_rebase_failed

儲存庫 rebase 失敗

衍合儲存庫變更失敗。

24

parsing_failed

解析失敗

Weblate 無法解析翻譯檔案。

25

translation_removed

移除了翻譯

已移除一種語言的翻譯。

26

suggestion_removed

移除了建議

已移除翻譯建議。

27

translation_replaced

取代了翻譯

搜尋及取代作業變更了翻譯。此事件會取代「變更了翻譯」。

28

repository_push_failed

儲存庫推送失敗

無法將儲存庫變更推送至上游。

29

suggestion_removed_during_cleanup

在清理時移除了建議

清理期間已移除廢棄的翻譯建議。

30

source_string_changed

來源字串有變更

已在 Weblate 中編輯來源字串。

31

string_added

新增了字串

已在 Weblate 中新增字串。

32

bulk_status_changed

已變更大量狀態

已批次變更一或多個字串的翻譯狀態。

33

visibility_changed

已變更可見性

已變更專案或元件的可見性。

34

user_added

新增了使用者

已授予使用者存取權。

35

user_removed

移除了使用者

已移除使用者的存取權。

36

translation_approved

核可了翻譯

已在檢閱期間核可翻譯。

37

marked_for_edit

標記為需要編輯

已將翻譯標記為需要編輯。

38

component_removed

移除了元件

已移除翻譯元件。

39

project_removed

移除了專案

已移除翻譯專案。

41

project_renamed

重新命名了專案

已重新命名翻譯專案。

42

component_renamed

重新命名了元件

已重新命名翻譯元件。

43

moved_component

移動了元件

已在專案中移動元件。

45

contributor_joined

有新貢獻者加入

使用者首次對翻譯做出貢獻。

46

announcement_posted

發佈了公告

已發佈公告。

47

alert_triggered

觸發了警告

已觸發元件警示。

48

language_added

新增了語言

已新增一種語言的翻譯。

49

language_requested

已請求加入語言

使用者申請新增語言。

50

project_created

建立了專案

已建立翻譯專案。

51

component_created

建立了元件

已建立翻譯元件。

52

user_invited

邀請了使用者

已邀請使用者加入專案。

53

repository_notification_received

收到儲存庫通知

Weblate 收到程式碼代管服務傳來的儲存庫通知。

54

translation_replaced_file_by_upload

上傳並取代了翻譯檔案

已使用上傳的檔案取代翻譯檔案。

55

license_changed

已變更授權

專案或元件的授權資訊已變更。

56

contributor_license_agreement_changed

已變更貢獻者授權協議

已變更貢獻者授權協議。

57

screenshot_added

新增了螢幕擷圖

已將螢幕擷圖與字串建立關聯。

58

screenshot_uploaded

上傳了螢幕擷圖

已上傳螢幕擷圖。

59

string_updated_in_the_repository

儲存庫有更新字串

從儲存庫同步時變更了字串。

60

add-on_installed

已安裝附加元件

已安裝附加元件。

61

add-on_configuration_changed

附加元件設定已變更

已變更附加元件的設定。

62

add-on_uninstalled

已解除安裝附加元件

已解除安裝附加元件。

63

string_removed

移除了字串

已從翻譯中移除字串。

64

comment_removed

移除了評論

已移除字串評論。

65

comment_resolved

解決了評論

已將字串評論標示為已解決。

66

explanation_updated

更新瞭解釋

來源字串的說明已更新。

67

category_removed

移除了類別

已移除元件類別。

68

category_renamed

重新命名了類別

元件類別已重新命名。

69

category_moved

移動了類別

元件類別已移動。

70

saving_string_failed

儲存字串失敗

Weblate 無法儲存已變更的字串。

71

string_added_in_the_repository

儲存庫有加入字串

從儲存庫同步時發現新字串。

72

string_updated_in_the_upload

上傳的檔案更新了字串

處理上傳的檔案時,有一個字串已變更。

73

string_added_in_the_upload

上傳的檔案新增了字串

處理上傳的檔案時發現新字串。

74

translation_updated_by_source_upload

透過上傳來源更新了翻譯

上傳來源檔案後已同步翻譯。

75

component_translation_completed

完成了元件翻譯

個別編輯後,元件中所有語言的翻譯皆已全部完成。自動翻譯、上傳及大量編輯不會觸發此事件。

76

applied_enforced_check

套用了強制檢查

套用強制檢查後,翻譯已標示為需要編輯。

77

propagated_change

傳播了變更

翻譯編輯已傳遞至另一個相符字串。

78

file_uploaded

檔案已上傳

已將檔案上傳至翻譯。

79

extra_flags_updated

附加標記已更新

來源字串的其他旗標已更新。

80

font_uploaded

字型已上傳

已上傳字型。

81

font_changed

字型已變更

上傳的字型已變更。

82

font_removed

字型已移除

已移除上傳的字型。

83

forced_synchronization_of_translations

已強制同步翻譯

已強制將翻譯檔案與儲存庫同步。

84

forced_rescan_of_translations

已強制重新掃描翻譯

已強制重新掃描翻譯檔案以尋找變更。

85

screenshot_removed

螢幕擷圖已移除

已移除螢幕擷圖。

86

label_added

標籤已新增

已為字串新增標籤。

87

label_removed

標籤已移除

已從字串移除標籤。

88

repository_cleanup

儲存庫清理

已清理儲存庫工作目錄。

89

source_string_added_in_the_upload

在上傳時新增了來源字串

處理上傳的檔案時已新增來源字串。

90

source_string_added_in_the_repository

在儲存庫中新增了來源字串

從儲存庫同步時已新增來源字串。

91

project_backed_up

專案已備份

已建立專案備份。

92

project_restored

專案已還原

已從備份還原專案。

93

component_restored

元件已還原

已從備份還原元件。

94

user_edit_reverted

使用者編輯已復原

已復原使用者選取的所有編輯。

95

project_setting_changed

專案設定已變更

專案設定已變更。

96

component_setting_changed

元件設定已變更

元件設定已變更。

97

user_access_changed

使用者存取已變更

使用者的存取權限已變更。

98

workspace_created

工作空間已建立

已建立工作空間。

99

workspace_setting_changed

工作空間設定已變更

工作空間設定已變更。

100

project_moved

專案已移動

專案已移入或移出工作空間。

101

remote_repository_updated

遠端儲存庫已更新

遠端儲存庫更新完成。

102

remote_repository_update_failed

遠端儲存庫更新失敗

更新遠端儲存庫失敗。

103

alert_dismissed

警示已關閉

已關閉元件警示。

104

alert_reopened

警示已重新開啟

元件警示在相關情境變更後重新開啟。

自訂附加元件清單

附加元件清單由 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