選用 Weblate 模組¶
您的安裝環境可使用多個選用模組。
Git 匯出器¶
使用 HTTP(S) 為您提供對底層 Git 儲存庫的唯讀存取。
安裝¶
將
weblate.gitexport加入settings.py的已安裝應用程式清單:INSTALLED_APPS += ("weblate.gitexport",)
透過安裝後移轉資料庫,將現有的儲存庫匯出:
weblate migrate
提示
Git 匯出器在我們的官方 Docker 映像中處於開啟狀態。要關閉它,使用:
WEBLATE_REMOVE_APPS=weblate.gitexport
使用¶
模組自動鉤入 Weblate,並且在 組件設定 中設定匯出儲存庫 URL。儲存庫在 Weblate URL的 /git/ 部分下是可以存取的,例如 https://example.org/git/weblate/main/。
公開可用專案的儲存庫可以被複製而無需認證:
git clone 'https://example.org/git/weblate/main/'
受限瀏覽儲存庫的權限(對於 私密 存取控制 專案或者當開啟 REQUIRE_LOGIN 時)需要可在 使用者個人資料 獲得的 API 權杖:
git clone 'https://user:KEY@example.org/git/weblate/main/'
備註
Weblate serves the Git repository itself, but it does not serve Git LFS
objects. See Git LFS for supported behavior. Clone repositories using
Git LFS from the upstream repository and add Weblate as another remote. If
you only need Git-tracked files, you can clone from Weblate with
GIT_LFS_SKIP_SMUDGE=1 to skip downloading Git LFS objects.
提示
預設情況下,使用者 群組的使用者與匿名使用者預設透過 存取儲存庫 和 高階使用者 角色存取公開專案。
帳單¶
這在 Hosted Weblate 上用於確定付費套餐、跟蹤發票和使用限制。
安裝¶
1. Add weblate.billing to installed apps in
settings.py:
INSTALLED_APPS += ("weblate.billing",)
執行資料庫移轉,以選擇性安裝模組所需的額外資料庫結構:
weblate migrate
付費套餐建立和分配¶
您必須先建立計費方案,才能啟用計費功能。前往 管理 區段(扳手圖示)並開啟 工具 畫面,再進入 Django 管理介面。
在 Django 管理介面中找到 BILLING 區段,然後新增計費方案。例如,可以新增費用為零的 Free 方案。
若要將計費方案指派給既有專案,也可以在 Django 管理介面 中使用 Customer billings 選項完成。
最後,Django 管理介面 提供 發票 選項用於記錄您的客戶付款。
使用¶
安裝後您可以在管理介面控制帳單。啟用了帳單模組的使用者將在他們的 使用者設定檔 中看到新的 帳單 分頁。
此外,計費模組允許非超級使用者建立新專案及組件(請參閱 新增翻譯專案和組件)。必須符合下列條件:
計費用量仍在設定限制內(超額使用會阻止建立專案或組件),而且已付款(如果方案費用不為零)
使用者對計費方案涵蓋的工作空間具備 新增專案至工作空間 權限。
建立專案時,使用者可以選擇專案所屬的工作空間。在有計費功能的工作空間中建立的專案,會計入指派給該工作空間的計費方案。具備 編輯工作空間設定 權限的使用者可以檢視及支付計費方案;計費通知電子郵件會寄給這些使用者。詳細資訊請參閱 帳單。
法律模組¶
這用在 Hosted Weblate 上,來提供所需的法律檔案。它開始時提供空白文件,會希望您填充文件中後面的範本:
legal/documents/tos.html服務條款文件
legal/documents/privacy.html隱私政策文件
legal/documents/summary.html服務條款與隱私政策的簡短概覽
legal/documents/contracts.html分包商資訊
The legal module embeds these templates inside Weblate. Its confirmation page
uses legal/documents/tos.html and, when a privacy policy link is
available, requires one agreement covering both the terms of service and the
privacy policy. This is separate from LEGAL_URL and
PRIVACY_URL, which are meant for linking to externally hosted legal
documents from the footer when the legal module is not enabled or as fallbacks
for hidden internal pages. When the legal module is enabled, Weblate links to
the internal legal pages by default.
On changing the terms of service or privacy policy, adjust
LEGAL_TOS_DATE when users should be forced to agree with the updated
documents.
備註
可以在這個 Git 儲存庫 <https://github.com/WeblateOrg/wllegal/tree/main/wllegal/templates/legal/documents> 中取得 Weblate s.r.o. 運營的 Hosted Weblate 的法律檔案。
隨附的服務條款及相關法律文件僅適用於 Weblate s.r.o. 營運的服務。可作為實作範例,但不應作為其他服務法律文件的依據。
安裝¶
1. Add weblate.legal to installed apps in
settings.py:
INSTALLED_APPS += ("weblate.legal",)
# Optional:
# Social auth pipeline to confirm TOS upon registration/subsequent sign in
SOCIAL_AUTH_PIPELINE += ("weblate.legal.pipeline.tos_confirm",)
# Middleware to enforce TOS confirmation of signed in users
MIDDLEWARE += [
"weblate.legal.middleware.RequireTOSMiddleware",
]
執行資料庫移轉,以選擇性安裝模組所需的額外資料庫結構:
weblate migrate
依 自訂法律文件與樣式 所述,提供符合您服務的法律文件範本。
提示
In Docker deployments, enable the legal module using
WEBLATE_LEGAL_INTEGRATION instead of editing
settings.py. Use tos-confirm to enable the legal module and
legal document confirmation enforcement, or wllegal to additionally
load the hosted legal document templates used by services operated by
Weblate s.r.o. These templates are not intended for general use. To provide
your own templates in Docker, place them in
/app/data/python/customize/templates/legal/documents, see
取代標誌與其它靜態檔案.
變更環境變數後,請重新建立 Docker 容器,例如使用 docker compose up -d。重新啟動既有容器不會套用已變更的環境值。
使用¶
安裝與自訂後,法律文件會顯示於 Weblate UI。
法律文件範本是一般 Django 範本。只有使用 {% translate %} 或 {% blocktranslate %} 等 Django 翻譯標籤時才會翻譯文字;純 HTML 文字會依原樣顯示。
法律頁面及登入與註冊概覽會提供 terms_url 和 privacy_url 變數,用於連結至服務條款和隱私權政策文件。
自訂法律文件與樣式¶
在 建立 Python 模組 中覆寫這些範本,以提供自己的法律文件:
templates/legal/documents/tos.htmltemplates/legal/documents/privacy.htmltemplates/legal/documents/summary.htmltemplates/legal/documents/contracts.htmltemplates/legal/styles.htmlstatic/weblate_customization/legal.css
請將自訂應用程式放在 weblate.legal 及其他提供法律範本覆寫應用程式之前的 INSTALLED_APPS,讓 Django 選取其範本。只會覆寫您提供的範本;其餘法律範本會繼續使用後續應用程式的預設值。
legal/styles.html 範本會包含在每個法律頁面的 HTML head 中。使用它從自訂應用程式載入樣式表:
{% load static %}
<link rel="stylesheet" href="{% static 'weblate_customization/legal.css' %}" />
新增或變更靜態檔案後,執行 weblate collectstatic --noinput。
在 Docker 部署中,請將文件範本置於 /app/data/python/customize/templates/legal/documents、將 styles.html 置於 /app/data/python/customize/templates/legal/styles.html,並將樣式表置於 /app/data/python/customize/static/legal.css。樣式表範本接著使用 {% static 'legal.css' %}。重新啟動 container 套用變更;請參閱 取代標誌與其它靜態檔案。
法律文件包裝器預設使用 tos CSS class。Weblate 不會為此 class 套用任何樣式;請在自訂樣式表中指定它,或將 LEGAL_DOCUMENT_CSS_CLASS 設為與您文件標記相符的其他 class。若不需要包裝器 class,請將此設定設為空字串。
使用 LEGAL_HIDDEN_DOCUMENTS,從法律選單隱藏分包商等選用法律頁面。直接要求隱藏頁面時會傳回 404 回應。如果隱藏 terms 或 privacy,則使用 terms_url 或 privacy_url 的連結會在已設定時退回使用 LEGAL_URL 或 PRIVACY_URL,否則會省略連結。
To use externally hosted legal documents with legal confirmation, configure
LEGAL_HIDDEN_DOCUMENTS to hide terms and privacy and set
LEGAL_URL and PRIVACY_URL. The confirmation page then
links to those external documents and requires one agreement covering both
without needing a legal/documents/tos.html template override. If no
privacy policy link is available, the confirmation covers only the terms of
service.
頭像¶
頭像在伺服器端下載並快取,來減少對預設服務的網站的洩露。透過為其設定的電子郵件地址來取回頭像的內建支援,可以使用 ENABLE_AVATARS 來關閉。
Weblate 目前支援:
在地化 CDN¶
JavaScript 在地化 CDN 和 翻譯檔案 CDN 附加元件會將檔案寫入 LOCALIZE_CDN_PATH;Weblate 不會提供這些檔案。請將提供 LOCALIZE_CDN_URL 的網頁伺服器或 CDN 設定為公開且唯讀的靜態檔案主機。
請將每個已發佈的 CDN 檔案視為公開資料。URL 中附加元件專用的 UUID 不是存取控制機制。請勿對包含私人字串、尚未發行的產品文字、客戶資料、內部 URL、API 範例、儲存庫路徑、翻譯者註解,或不應公開的檔案格式中繼資料之組件啟用 CDN 附加元件。
翻譯檔案 CDN 附加元件會以 Weblate 支援的格式發佈原始翻譯檔案。瀏覽器或其他用戶端可能會將部分格式解讀為 HTML、SVG、XML、JavaScript、YAML 或特定應用程式的設定。請從與 Weblate 及翻譯使用端應用程式分離的專用網域提供 CDN。請勿與 CDN 網域共用驗證 Cookie。
建議的伺服器設定:
只提供
LOCALIZE_CDN_PATH所設定的目錄;請勿公開 Weblate 儲存庫、備份、媒體、設定或整個資料目錄。停用目錄列舉。
使用 HTTPS 並使網路伺服器對 CDN 主機唯讀。
傳送值為
nosniff的 X-Content-Type-Options。採用保守的 MIME 類型設定。將未知翻譯格式以 text/plain 或 application/octet-stream 提供;只有
weblate.js應以 JavaScript 提供。對於不應在瀏覽器中轉譯的原始翻譯格式,請考慮新增值為
attachment的 Content-Disposition。只為需要從瀏覽器存取檔案的網站設定
Access-Control-Allow-Origin。設定符合更新需求的快取存留時間,並在過時翻譯必須迅速消失時清除 CDN 快取。
下列 nginx 程式碼片段只提供已設定的 CDN 目錄,並對原始翻譯檔案套用保守的預設值:
#
# nginx configuration for the Weblate localization CDN
#
# You will want to change:
#
# - server_name to match the host configured in LOCALIZE_CDN_URL
# - root to match LOCALIZE_CDN_PATH
# - Access-Control-Allow-Origin to the sites that need browser access
# - TLS configuration if HTTPS is not terminated before nginx
#
server {
listen 80;
server_name cdn.example.com;
# LOCALIZE_CDN_PATH
root /home/weblate/data/l10n-cdn;
autoindex off;
disable_symlinks on;
location = / {
return 404;
}
# The JavaScript localization add-on publishes this loader.
location ~ "^/[0-9a-f]{32}/weblate\.js$" {
try_files $uri =404;
types {
application/javascript js;
}
default_type application/javascript;
add_header X-Content-Type-Options nosniff always;
# add_header Access-Control-Allow-Origin "https://www.example.com" always;
expires 1h;
}
# Other CDN files are translation files. Serve them conservatively so raw
# formats are not interpreted as active browser content.
location / {
try_files $uri =404;
types {
}
default_type text/plain;
add_header X-Content-Type-Options nosniff always;
add_header Content-Disposition "attachment" always;
# add_header Access-Control-Allow-Origin "https://www.example.com" always;
expires 1h;
}
}
使用 GnuPG 為 Git 提交簽名¶
所有的提交均可由 Weblate 執行個體的 GnuPG 金鑰為其簽名。
開啟
WEBLATE_GPG_IDENTITY。(Weblate 將在需要時產生一個 GnuPG 金鑰,並使用它為所有的翻譯提交簽名。)這個特性需要安裝 GnuPG 2.1 或更新版。
您可以在
DATA_DIR中找到金鑰,而公開金鑰顯示在“關於”頁面上:
另外您還可以將現有的金鑰匯入 Weblate 中,當呼叫 pgp 時只設定
HOME=$DATA_DIR/home。
提示
Weblate 會將關鍵材料快取很長一段時間。如果您透過 WEBLATE_GPG_IDENTITY 讓 Weblate 產生一個金鑰,接著用相同身分匯入金鑰來使用現有金鑰的話,建議清空 redis 快取來檢視此類變更的效果。
備註
在多個主機間共享 DATA_DIR 時,請遵照 https://wiki.gnupg.org/NFS 說明讓 GnuPG 簽名可靠地工作。
速率限制¶
在 4.6 版的變更: 速率限制不再適用於已登入的超級使用者。
Weblate 中有幾個操作受速率限制。每個範圍的速率限制單獨評估。一個範圍中,RATELIMIT_WINDOW 秒內最多允許 RATELIMIT_ATTEMPTS 次嘗試。超過這個速率會因 RATELIMIT_LOCKOUT 而封禁那個範圍;Weblate 不會將單一範圍的封禁轉變為整個網站的 IP 封鎖。超出單一範圍, 如 TRANSLATE 或 SEARCH 的限制也不會造成 LOGIN 或 SECOND_FACTOR 等不相關範圍被封禁。此外,還有適用特定範圍的設定,例如 RATELIMIT_CONTACT_ATTEMPTS 或 RATELIMIT_TRANSLATE_ATTEMPTS 。下方表格是可用範圍的完整清單。
後面的操作受到速率限制:
名稱 |
範圍 |
允許的嘗試 |
速率限制視窗 |
鎖定時間 |
|---|---|---|---|---|
註冊 |
|
5 |
300 |
600 |
傳送訊息給管理員 |
|
2 |
300 |
600 |
登入時的密碼驗證 |
|
5 |
300 |
600 |
第二要素身分驗證 |
|
5 |
300 |
600 |
網站範圍搜尋 |
|
6 |
60 |
60 |
翻譯 |
|
30 |
60 |
600 |
新增至詞彙表 |
|
30 |
60 |
600 |
開始翻譯到一種新語言 |
|
2 |
300 |
600 |
建立新專案 |
|
5 |
600 |
600 |
連線 GitHub 帳號 |
|
100 |
3600 |
600 |
每個範圍內,速率限制的依據在使用者登入時為會話,在未登入時為 IP 地址。
對於已登入使用者,Weblate 會在每個有效範圍 lockout 期間,於 稽核紀錄 記錄第一個遭拒的請求,包括範圍與請求路徑。同一 lockout 期間重複拒絕不會建立額外 audit-log 項目。
如果使用者沒能在 AUTH_LOCK_ATTEMPTS 的次數內登入,那麼帳號的密碼驗證將關閉,直到完成了重置密碼過程為止。
這些設定也可以在 Docker 容器中應用,在設定名稱中新增 WEBLATE_ 字首 例如 RATELIMIT_ATTEMPTS 變成 WEBLATE_RATELIMIT_ATTEMPTS。
API 具有另外的速率限制設定,請參閱 API 速率限制。