選用 Weblate 模組

您的安裝環境可使用多個選用模組。

Git 匯出器

使用 HTTP(S) 為您提供對底層 Git 儲存庫的唯讀存取。

安裝

  1. weblate.gitexport 加入 settings.py 的已安裝應用程式清單:

    INSTALLED_APPS += ("weblate.gitexport",)
    
  2. 透過安裝後移轉資料庫,將現有的儲存庫匯出:

    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 自行提供 Git 儲存庫,但它不提供 Git LFS 物件。對使用 Git LFS 的儲存庫,從上游儲存庫複製並將 Weblate 新增為另一個遠端。如果只需要 Git-tracked 檔案,可以使用 GIT_LFS_SKIP_SMUDGE=1 引數從 Weblate 複製跳過下載 Git LFS 物件。

提示

預設情況下,使用者 群組的使用者與匿名使用者預設透過 存取儲存庫高階使用者 角色存取公開專案。

帳單

這在 Hosted Weblate 上用於確定付費套餐、跟蹤發票和使用限制。

安裝

1. Add weblate.billing to installed apps in settings.py:

INSTALLED_APPS += ("weblate.billing",)
  1. 執行資料庫移轉,以選擇性安裝模組所需的額外資料庫結構:

weblate migrate

付費套餐建立和分配

您必須先建立計費方案,才能啟用計費功能。前往 管理 區段(扳手圖示)並開啟 工具 畫面,再進入 Django 管理介面

在 Django 管理介面中找到 BILLING 區段,然後新增計費方案。例如,可以新增費用為零的 Free 方案。

若要將計費方案指派給既有專案,也可以在 Django 管理介面 中使用 Customer billings 選項完成。

最後,Django 管理介面 提供 發票 選項用於記錄您的客戶付款。

使用

安裝後您可以在管理介面控制帳單。啟用了帳單模組的使用者將在他們的 使用者設定檔 中看到新的 帳單 分頁。

此外,計費模組允許非超級使用者建立新專案及元件(請參閱 新增翻譯專案和元件)。必須符合下列條件:

  • 計費用量仍在設定限制內(超額使用會阻止建立專案或元件),而且已付款(如果方案費用不為零)

  • 使用者對計費方案涵蓋的工作空間具備 新增專案至工作空間 權限。

建立專案時,使用者可以選擇專案所屬的工作空間。在有計費功能的工作空間中建立的專案,會計入指派給該工作空間的計費方案。具備 編輯工作空間設定 權限的使用者可以檢視及支付計費方案;計費通知電子郵件會寄給這些使用者。詳細資訊請參閱 帳單

頭像

頭像在伺服器端下載並快取,來減少對預設服務的網站的洩露。透過為其設定的電子郵件地址來取回頭像的內建支援,可以使用 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 主機唯讀。

  • 傳送值為 nosniffX-Content-Type-Options

  • 採用保守的 MIME 類型設定。將未知翻譯格式以 text/plainapplication/octet-stream 提供;只有 weblate.js 應以 JavaScript 提供。

  • 對於不應在瀏覽器中轉譯的原始翻譯格式,請考慮新增值為 attachmentContent-Disposition

  • 只為需要從瀏覽器存取檔案的網站設定 Access-Control-Allow-Origin

  • 設定符合更新需求的快取存留時間,並在過時翻譯必須迅速消失時清除 CDN 快取。

下列 nginx 程式碼片段只提供已設定的 CDN 目錄,並對原始翻譯檔案套用保守的預設值:

weblate/examples/weblate.nginx.cdn.conf
#
# 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 中找到金鑰,而公開金鑰顯示在“關於”頁面上:

    ../_images/about-gpg.webp
  • 另外您還可以將現有的金鑰匯入 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 封鎖。超出單一範圍, 如 TRANSLATESEARCH 的限制也不會造成 LOGINSECOND_FACTOR 等不相關範圍被封禁。此外,還有適用特定範圍的設定,例如 RATELIMIT_CONTACT_ATTEMPTSRATELIMIT_TRANSLATE_ATTEMPTS 。下方表格是可用範圍的完整清單。

後面的操作受到速率限制:

名稱

範圍

允許的嘗試

速率限制視窗

鎖定時間

註冊

REGISTRATION

5

300

600

傳送訊息給管理員

MESSAGE

2

300

600

登入時的密碼驗證

LOGIN

5

300

600

第二要素身分驗證

SECOND_FACTOR

5

300

600

網站範圍搜尋

SEARCH

6

60

60

翻譯

TRANSLATE

30

60

600

新增至詞彙表

GLOSSARY

30

60

600

開始翻譯到一種新語言

LANGUAGE

2

300

600

建立新專案

PROJECT

5

600

600

連線 GitHub 帳號

GITHUB_SETUP

100

3600

600

每個範圍內,速率限制的依據在使用者登入時為會話,在未登入時為 IP 地址。

如果使用者沒能在 AUTH_LOCK_ATTEMPTS 的次數內登入,那麼帳號的密碼驗證將關閉,直到完成了重置密碼過程為止。

這些設定也可以在 Docker 容器中應用,在設定名稱中新增 WEBLATE_ 字首 例如 RATELIMIT_ATTEMPTS 變成 WEBLATE_RATELIMIT_ATTEMPTS

API 具有另外的速率限制設定,請參閱 API 速率限制