Vnútorná štruktúra Weblate

Poznámka

Táto kapitola vám poskytne základný prehľad o vnútornej štruktúre Weblate.

Weblate odvodzuje väčšinu svojej štruktúry kódu a je založený na Django.

Štruktúra adresárov

Rýchly prehľad štruktúry adresárov hlavného repozitára Weblate:

docs

Zdrojový kód tejto dokumentácie, ktorý možno zostaviť pomocou Sphinx.

dev-docker

Kód Docker na spustenie vývojového servera, pozri Spúšťanie Weblate lokálne v Dockeri.

weblate

Zdrojový kód Weblate ako aplikácie Django, pozri Vnútorná štruktúra Weblate.

weblate/static

Klientské súbory (CSS, Javascript a obrázky), pozri Frontend Weblate.

Moduly

Weblate pozostáva z niekoľkých aplikácií Django (niektoré voliteľné, pozri Voliteľné moduly Weblate):

accounts

Používateľský účet, profily a upozornenia.

addons

Doplnky na úpravu správania Weblate, pozri Doplnky.

api

API založené na Django REST framework.

auth

Autentifikácia a oprávnenia.

billing

Voliteľný modul Fakturácia.

checks

Modul Kontroly kvality pre kontrolu prekladových reťazcov.

fonts

Modul kontrol vykresľovania písiem.

formats

Abstraktná vrstva formátu súborov založená na translate-toolkit.

gitexport

Voliteľný modul Git exporter.

lang

Modul definujúci modely jazykov a množných čísel.

legal

Voliteľný modul Právny modul.

machinery

Integrácia služieb strojového prekladu.

memory

Vstavaná pamäť prekladov, pozri Prekladová pamäť.

screenshots

Modul správy snímok obrazovky a OCR.

trans

Hlavný modul na spracovanie prekladov.

utils

Rôzne pomocné utility.

vcs

Abstrakcia systému správy verzií.

wladmin

Prispôsobenie administrátorského rozhrania Django.

Zdroje prekladu

Jednotka má kanonický zdroj súboru a môže mať preklad z iného jazyka ako svoj efektívny zdroj. Udržujte Unit.source a Unit.source_unit kanonické: synchronizácia repozitára a formáty súborov na tom závisia. Použite effective_source a jeho prístupové metódy jazyka a množného čísla pre obsah zobrazovaný prekladateľom. Nenahrádzajte source na skopírovanej jednotke, aby ste simulovali efektívny zdroj; iné polia a súvisiace objekty stále popisujú kanonický zdroj.

Použite Unit.source_snapshot, keď operácia potrebuje zachovať zdrojový text, jazyk, pravidlá množného čísla a metadáta terminológie spolu. Jej identity definuje zmeny zdroja na zosúladenie závislostí, detekciu konfliktov editora a diagnostiku AI. Pre historické vykresľovanie a správy čítajte snímku zaznamenanú pri zmene, namiesto jej rekonštrukcie z aktuálnej jednotky.

Chýbajúci nakonfigurovaný rodič zostáva vlastným zdrojom: jeho text je prázdny, jeho jazyk je zachovaný a jeho dieťa je zablokované. effective_source_unit je potom None. Iba odstránenie pracovného postupu alebo výber kanonického jazyka obnoví kanonický zdroj.

Prístupové metódy iba pre text nenačítavajú metadáta jazyka alebo množného čísla. Pre dávkových spotrebiteľov, ktorí potrebujú úplný efektívny zdroj, použite UnitQuerySet.prefetch_translation_parent() spolu s ich existujúcimi prednačítaniami jednotiek. prefetch_source() to už zahŕňa. Bežné vyhľadávania zachovávajú kanonickú cestu dotazu a bežné jednotky si zachovávajú svoje existujúce hashy obsahu.

Zápisy závislé od zdroja vstupujú do source_operation() pred uzamknutím riadkov jednotiek. Vonkajšia operácia preberá zdieľanú bránu projektu a číta jej mapovanie pracovného postupu v jednom cykle databázy, vrátane projektov bez vlastných pracovných postupov. Zmeny pracovného postupu preberajú source_project_gate(..., exclusive=True) pred overením alebo perzistenciou. Zmeny konfigurácie ovplyvňujúce niekoľko projektov získavajú svoje brány vo vzostupnom poradí ID projektu. Nikdy nevylepšujte zdieľanú bránu na exkluzívnu vnútri operácie.

Funkcia brány databázy sa najprv uzamkne a číta pracovné postupy v samostatnom príkaze, takže čakajúci vidí potvrdenú konfiguráciu, kým čakal. Cesty zápisu používajú tento pohľad v rozsahu transakcie namiesto nastavení modelu vo vyrovnávacej pamäti. Vnorené operácie ho opakovane používajú; vrátené body uloženia zahodia svoju prácu so závislosťami. Zfrontované závislosti sa zosúladia pred potvrdením a aktualizácie externej pamäte sa naplánujú po potvrdení. História zmien zdroja sa zapisuje hromadne, čo zachováva jednotlivé záznamy pri dávkovaní ich odosielania oznámení.

Získajte všetky požadované zámky repozitára pred bránami projektu, potom zámky riadkov komponentov a jednotiek. Samotné zosúladenie iba mení stav databázy a nezískava zámky repozitára. Tuto hranicu aplikujte na hromadné importy, automatický preklad, zlyhania uloženia súborov, vymazanie a obnovenie, ako aj na zápisy editora. Zmeny jazyka a pravidiel množného čísla vyžadujú exkluzívne brány pred ich aktualizáciami. Historické migrácie používajú historické modely bez týchto pomocníkov za behu.

Výber zdroja strojového prekladu sa uskutočňuje pred mapovaním kódov jazykov na poskytovateľa. Použite get_unit_source_language() pre preklad a uses_custom_source() pre správu slovníka špecifickú pre pracovný postup. Kódy poskytovateľa môžu zlúčiť odlišné varianty jazykov, takže rovnosť kódov nemôže určiť, či bol vybratý zdroj pracovného postupu. Explicitný výber komponentu alebo sekundárneho zdroja má prednosť pred zdrojom pracovného postupu.

Vnútorná štruktúra úloh na pozadí

Rada

Táto sekcia opisuje vnútornú štruktúru úloh Celery. Úlohy na pozadí pomocou Celery opisuje, ako konfigurovať Celery na spúšťanie úloh.

Weblate používa Celery na vykonávanie úloh na pozadí. Niektoré úlohy sú spúšťané udalosťami a niektoré sú spúšťané podľa plánu.

Celery Beat sa používa na plánovanie úloh a django-celery-beat sa používa na uloženie plánu periodických úloh do databázy. Plán úloh je nakonfigurovaný v tasks.py v každej z aplikácií Django.

Úlohy sú spracovávané pomocou niekoľkých front; smerovanie je nakonfigurované v settings.py. Fronty boli navrhnuté tak, aby oddeľovali rôzne typy zaťaženia:

celery

Predvolený front, kde sa spracúvajú úlohy na pozadí.

notify

Doručuje notifikačné e-maily, a to pre udalosti vo Weblate aj pre autentifikáciu alebo registráciu. Ide o samostatný front, aby bolo doručovanie e-mailov hladké, aj keď existuje backlog iných úloh.

memory

Aktualizuje položky pamäte prekladov. Aktualizačný front môže byť dlhý pri importe nových reťazcov a dlhé spracovanie tu až tak nevadí, takže mať samostatný front zabraňuje blokovaniu iných úloh.

backup

Úlohy zálohovania nemôžu byť vykonávané paralelne a jeden vyhradený pracovník to uľahčuje.

translate

Je známe, že úlohy automatického prekladu trvajú dlho, pretože využívajú externé služby.