Voliteľné moduly Weblate

Pre vaše nastavenie je dostupných niekoľko voliteľných modulov.

Git exporter

Poskytuje vám prístup na čítanie k podkladovému repozitáru Git pomocou HTTP(S).

Inštalácia

  1. Pridajte weblate.gitexport do nainštalovaných aplikácií v settings.py:

    INSTALLED_APPS += ("weblate.gitexport",)
    
  2. Exportujte existujúce repozitáre migráciou vašej databázy po inštalácii:

    weblate migrate
    

Rada

Git exporter je zapnutý v našom oficiálnom Docker obraze. Na jeho vypnutie použite:

WEBLATE_REMOVE_APPS=weblate.gitexport

Použitie

Modul sa automaticky pripojí k Weblate a nastaví URL exportovaného repozitára v Konfigurácia komponentu. Repozitáre sú dostupné pod časťou /git/ URL Weblate, napríklad https://example.org/git/weblate/main/.

Repozitáre pre verejne dostupné projekty je možné klonovať bez autentifikácie:

git clone 'https://example.org/git/weblate/main/'

Prístup na prehliadanie repozitárov s obmedzeným prístupom (s Súkromné riadenie prístupu alebo keď je povolené REQUIRE_LOGIN) vyžaduje API token, ktorý je možné získať vo vašom používateľskom profile:

git clone 'https://user:KEY@example.org/git/weblate/main/'

Poznámka

Weblate obsluhuje samotný repozitár Git, ale neobsluhuje objekty Git LFS. Pozrite si Git LFS pre podporované správanie. Klonujte repozitáre pomocou Git LFS z hlavného repozitára a pridajte Weblate ako ďalší vzdialený repozitár. Ak potrebujete iba súbory sledované Gitom, môžete klonovať z Weblate s GIT_LFS_SKIP_SMUDGE=1, aby ste preskočili sťahovanie objektov Git LFS.

Rada

Predvolene majú členovia skupiny Používatelia a anonymný používateľ prístup k repozitárom verejných projektov prostredníctvom rolí Prístup k repozitáru a Pokročilý používateľ.

Fakturácia

Toto sa používa na Hosted Weblate na definovanie fakturačných plánov, sledovanie faktúr a limitov využitia.

Inštalácia

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

INSTALLED_APPS += ("weblate.billing",)
  1. Spustite migráciu databázy na voliteľnú inštaláciu dodatočných databázových štruktúr pre modul:

weblate migrate

Vytvorenie a priradenie fakturačného plánu

Najprv musíte vytvoriť fakturačný plán na aktiváciu fakturácie. Prejdite do sekcie Administrácia (reprezentovanej ikonou kľúča) a otvorte obrazovku Nástroje. Odtiaľ prejdite do Django admin rozhrania.

V Django admin rozhraní nájdite sekciu BILLING a pridajte fakturačný plán. Napríklad môžete pridať plán Zdarma bez poplatkov.

Ak chcete priradiť fakturačný plán k existujúcemu projektu, môžete to urobiť aj v Django admin rozhraní pomocou možnosti Zákaznícke fakturácie.

Nakoniec, Django admin rozhranie poskytuje možnosť Faktúra na zaznamenávanie platieb vašich zákazníkov.

Použitie

Po inštalácii môžete ovládať fakturáciu v administrátorskom rozhraní. Používatelia s povolenou fakturáciou dostanú novú kartu Fakturácia vo svojom používateľskom profile.

Superužívatelia môžu zobraziť 20 najnovších záznamov auditu fakturácie na stránke s podrobnosťami o fakturácii. V časti Auditný záznam vyberte Zobraziť všetko a prehliadajte staršie záznamy pomocou ovládacích prvkov stránkovania.

Fakturačný modul navyše umožňuje používateľom vytvárať nové projekty a komponenty bez toho, aby boli superpoužívatelia (pozri Pridávanie prekladových projektov a komponentov). Toto je možné, keď sú splnené nasledujúce podmienky:

  • Fakturácia je v rámci svojich nakonfigurovaných limitov (akékoľvek prekročenie vedie k blokovaniu vytvárania projektov/komponentov) a zaplatená (ak jej cena nie je nulová)

  • Používateľ má oprávnenie Pridať projekty do pracovného priestoru pre pracovný priestor pokrytý fakturačným plánom.

Pri vytváraní projektu si používateľ môže vybrať, ktorý pracovný priestor má obsahovať projekt. Projekty vytvorené v pracovnom priestore s fakturáciou sa započítavajú do fakturačného plánu priradeného tomuto pracovnému priestoru. Používatelia s oprávnením Upraviť nastavenia pracovného priestoru môžu zobraziť a zaplatiť fakturačný plán; týmto používateľom sa odosielajú fakturačné e-mailové upozornenia. Podrobnosti nájdete v Fakturácia.

Avatary

Avatary sa sťahujú a ukladajú do vyrovnávacej pamäte na strane servera, aby sa znížili úniky informácií na stránky, ktoré ich predvolene obsluhujú. Vstavanú podporu na získavanie avatarov z e-mailových adries, ktoré sú pre to nakonfigurované, je možné vypnúť pomocou ENABLE_AVATARS.

Weblate momentálne podporuje:

CDN pre lokalizáciu

Doplnky CDN pre lokalizáciu JavaScriptu a Prekladové súbory CDN zapisujú súbory do LOCALIZE_CDN_PATH; Weblate ich neposkytuje. Nakonfigurujte webový server alebo CDN poskytujúce LOCALIZE_CDN_URL ako verejný hostiteľ statických súborov iba na čítanie.

Považujte každý publikovaný súbor CDN za verejný. UUID špecifické pre doplnok v URL nie je mechanizmus riadenia prístupu. Nepovoľujte doplnky CDN pre komponenty, ktoré obsahujú súkromné reťazce, nevydaný text produktu, údaje o zákazníkoch, interné URL, príklady API, cesty repozitára, komentáre prekladateľov alebo metadáta formátu súboru, ktoré by nemali byť vystavené.

Doplnok Prekladové súbory CDN publikuje surové prekladové súbory vo formátoch podporovaných Weblate. Niektoré formáty môžu byť interpretované prehliadačmi alebo inými klientmi ako HTML, SVG, XML, JavaScript, YAML alebo konfigurácia špecifická pre aplikáciu. Poskytujte CDN z vyhradenej domény, ktorá je oddelená od Weblate a od aplikácie spotrebúvajúcej preklady. Nezdieľajte autentifikačné cookies s doménou CDN.

Odporúčaná konfigurácia servera:

  • Poskytujte iba adresár nakonfigurovaný pomocou LOCALIZE_CDN_PATH; nevystavujte repozitáre Weblate, zálohy, médiá, konfiguráciu ani celý dátový adresár.

  • Zakázať výpis adresárov.

  • Zamietnite prístup k .kotlin-sdk-staging a všetkému jeho obsahu. Doplnok Kotlin SDK používa tento adresár na dočasnú prípravu, nie na publikovanie. Aplikujte toto obmedzenie pred povolením doplnku, vrátane prípadu, keď CDN kopíruje súbory z pôvodného adresára.

  • Používajte HTTPS a nastavte hostiteľa CDN ako iba na čítanie z webového servera.

  • Odosielajte X-Content-Type-Options s hodnotou nosniff.

  • Nakonfigurujte konzervatívne typy MIME. Neznáme formáty prekladov poskytujte ako text/plain alebo application/octet-stream; weblate.js poskytujte iba ako JavaScript.

  • Pre surové formáty prekladov, ktoré nie sú určené na vykreslenie v prehliadači, zvážte pridanie Content-Disposition s hodnotou attachment.

  • Nakonfigurujte Access-Control-Allow-Origin iba pre stránky, ktoré potrebujú prístup prehliadača k súborom.

  • Nastavte životnosť vyrovnávacej pamäte tak, aby zodpovedala vašim očakávaniam aktualizácií, a vyčistite vyrovnávaciu pamäť CDN, keď staré preklady musia rýchlo zmiznúť.

Nasledujúci úryvok nginx poskytuje iba nakonfigurovaný adresár CDN a aplikuje konzervatívne predvolené hodnoty pre surové prekladové súbory:

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;
    }

    # Kotlin SDK preparation files must never be served.
    location ^~ /.kotlin-sdk-staging {
        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;
    }

    # Content-addressed Android artifacts never change at the same URL.
    location ~ "^/[0-9a-f]{32}/artifacts/[0-9a-f]{64}\\.arsc$" {
        try_files $uri =404;
        types { }
        default_type application/octet-stream;
        add_header X-Content-Type-Options nosniff always;
        add_header Content-Disposition "attachment" always;
        add_header Cache-Control "public, max-age=31536000, immutable";
        # add_header Access-Control-Allow-Origin "https://www.example.com" always;
    }

    # Other CDN files are translation files. Serve them conservatively so raw
    # formats are not interpreted as active browser content.
    # Manifest JSON files also use this one-hour cache policy.
    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;
    }
}

Podpisovanie zápisov Git pomocou GnuPG

Všetky zápisy môžu byť podpísané kľúčom GnuPG inštancie Weblate.

  • Zapnite WEBLATE_GPG_IDENTITY. (Weblate vygeneruje kľúč GnuPG, keď bude potrebný, a použije ho na podpisovanie všetkých zápisov prekladov.)

    Táto funkcia vyžaduje nainštalovaný GnuPG 2.1 alebo novší.

    Kľúč nájdete v DATA_DIR a verejný kľúč je zobrazený na stránke „O nás“:

    ../_images/about-gpg.webp
  • Prípadne môžete do Weblate importovať aj existujúce kľúče, stačí nastaviť HOME=$DATA_DIR/home pri vyvolaní gpg.

Rada

Materiál kľúča je Weblate dlhodobo ukladaný do vyrovnávacej pamäte. V prípade, že necháte Weblate vygenerovať kľúč s WEBLATE_GPG_IDENTITY a potom importujete kľúč s tou istou identitou na použitie existujúceho kľúča, odporúča sa vyčistiť vyrovnávaciu pamäť redis, aby ste videli účinok takejto zmeny.

Poznámka

Pri zdieľaní DATA_DIR medzi viacerými hostiteľmi prosím dodržujte pokyny na https://wiki.gnupg.org/NFS, aby podpisovanie GnuPG fungovalo spoľahlivo.

Obmedzovanie rýchlosti

Zmenené vo verzii 4.6: Obmedzovanie rýchlosti sa už nevzťahuje na prihlásených super používateľov.

Niekoľko operácií vo Weblate je obmedzených rýchlosťou. Limity rýchlosti sa vyhodnocujú nezávisle pre každý rozsah. Najviac RATELIMIT_ATTEMPTS pokusov je povolených v rámci RATELIMIT_WINDOW sekúnd v jednom rozsahu. Tento rozsah je potom zablokovaný na RATELIMIT_LOCKOUT; Weblate z toho neurobí dočasný zákaz IP pre celú stránku. Prekročenie jedného rozsahu, ako je TRANSLATE alebo SEARCH, samo o sebe neblokuje nesúvisiace rozsahy, ako sú LOGIN alebo SECOND_FACTOR. Existujú aj nastavenia špecifické pre rozsahy, napríklad RATELIMIT_CONTACT_ATTEMPTS alebo RATELIMIT_TRANSLATE_ATTEMPTS. Tabuľka nižšie je úplným zoznamom dostupných rozsahov.

Nasledujúce operácie podliehajú obmedzeniu rýchlosti:

Názov

Rozsah

Povolené pokusy

Okno obmedzenia rýchlosti

Obdobie zablokovania

Registrácia

REGISTRATION

5

300

600

Odosielanie správy administrátorom

MESSAGE

2

300

600

Overenie heslom pri prihlásení

LOGIN

5

300

600

Obnovenie hesla

PASSWORD_RESET

5

300

600

Dvojfaktorová autentifikácia

SECOND_FACTOR

5

300

600

Vyhľadávanie na celej stránke

SEARCH

6

60

60

Prekladanie

TRANSLATE

30

60

600

Pridanie do slovníka

GLOSSARY

30

60

600

Začatie prekladu do nového jazyka

LANGUAGE

2

300

600

Vytváranie nového projektu

PROJECT

5

600

600

Pripojenie účtu GitHub

GITHUB_SETUP

100

3600

600

Vykresľovanie náhľadu Markdown

MARKDOWN_PREVIEW

60

60

60

V rámci každého rozsahu je obmedzenie rýchlosti založené na reláciách, keď je používateľ prihlásený, a na IP adrese, ak nie je.

Prísne vynucovanie medzi súbežnými pracovníkmi vyžaduje backend vyrovnávacej pamäte s operáciami atomického inkrementovania a dekrementovania. Štandardná konfigurácia Konfigurovať vyrovnávaciu pamäť používajúca Valkey alebo Redis poskytuje tieto operácie.

Pre prihlásených používateľov Weblate zaznamenáva prvú zamietnutú požiadavku počas každého aktívneho zablokovania rozsahu v Audítorský protokol, vrátane rozsahu a cesty požiadavky. Opakované zamietnutia počas toho istého zablokovania nevytvárajú ďalšie záznamy v audítorskom protokole.

Ak sa používateľovi nepodarí prihlásiť AUTH_LOCK_ATTEMPTS krát, overenie heslom bude na účte vypnuté, kým neprejde procesom resetovania hesla.

Nastavenia je možné aplikovať aj v kontajneri Docker pridaním predpony WEBLATE_ k názvu nastavenia, napríklad RATELIMIT_ATTEMPTS sa stane WEBLATE_RATELIMIT_ATTEMPTS.

API má samostatné nastavenia obmedzovania rýchlosti, pozri Obmedzovanie rýchlosti API.