Weblate forráskód

A Weblate fejlesztése a GitHub felületen zajlik. Szívesen látjuk, ha elágaztatja (forkolja) a kódot, és beküld egy módosítási kérelmet (pull request). Más formában benyújtott javításokat is örömmel fogadunk.

Lásd még

Tekintse meg a belső működést, hogy lássa, hogyan néz ki a Weblate belülről.

Jó javítás (patch) írása

Változások elkülönítése

Kellemetlen, ha valaki egy hatalmas javítást küld be, ami állítólag 11 különféle problémát orvosol, miközben a megbeszélések és vélemények szerint ezek közül 10-el nem értenek egyet vagy 9-et már másként megoldottak. Ilyenkor a beolvasztást végző személynek ki kell válogatnia az érdemi módosítást a sok forrás közül, ami jelentős többletmunkát jelent.

Lehetőleg minden egyes javítás, amely egy problémát kezel, külön véglegesítésként (commitként) kerüljön beküldésre, saját leírással, amely pontosan meghatározza, mit módosít. Így a karbantartó vagy más érdekelt fél szelektíven alkalmazhatja a változtatásokat.

A különálló változtatások emellett nagyban segítik a hibakeresést és a visszakövetést (bisecting) is a jövőbeli problémák és regressziók feltárásában.

Dokumentáció

A dokumentáció írása fárasztó lehet, de valakinek el kell végeznie. Sokkal könnyebb a helyzet, ha a dokumentációt a kódmódosításokkal együtt küldi be. Ne feledje dokumentálni a metódusokat, az összetett kódrészeket és a felhasználók számára látható funkciókat.

Tesztelési esetek

A tesztek lehetővé teszik, hogy gyorsan ellenőrizzük a funkciók működését. Ezt az állapotot megőrizni és tovább javítani csak úgy lehet, ha minden újonnan hozzáadott funkció tesztelve van. Minden új funkcióhoz legalább egy érvényes teszteset szükséges, amely igazolja, hogy az a dokumentációnak megfelelően működik.

Véglegesítési üzenetek

A Git véglegesítéseknek a Conventional Commits szabványt kell követniük.

Type checking

Any new code should utilize PEP 484 type hints. We are using mypy to check them because it has a Django plugin that makes type checking of Django apps practical.

New and changed code should not introduce new mypy failures where current Django typing support makes that practical. The code base is not yet completely covered by type annotations, and some Django constructs are difficult to annotate precisely. CI therefore enforces mypy only for selected modules and reports other findings separately.

Kódolási szabvány és kódellenőrzés (lint)

A kódnak meg kell felelnie a PEP 8 kódolási irányelveknek, és a ruff formázóval kell formázni.

A kódminőség ellenőrzésére használható a ruff, amelynek beállításai a pyproject.toml fájlban találhatók.

When suppressing a ruff diagnostic, prefer # ruff: ignore[rule-name] with the human-readable rule name. Place the comment on the line above the logical statement or block when that does not broaden the suppression scope. Keep the comment inline when moving it would change the scope, affect import sorting, or get between another tool’s disable-next comment and the code it targets.

The easiest approach to enforce all this is to install prek. This is a third-party reimplementation of the pre-commit tool used by Weblate. It is included in the development dependencies declared in pyproject.toml, so installing those dependencies makes prek available.

To check all files manually, run:

uv run prek run --all-files

If you prefer the original pre-commit client, it uses the same configuration from .pre-commit-config.yaml.

Biztonságos kódolás

A Weblate-hez írt bármely kódnak a Security by Design Principles elveit kell követnie.

Mesterséges intelligencia (AI) irányelvek

Ha tartalmat küld be a projekt számára, ezzel engedélyt ad annak változatlan felhasználására, és garantálnia kell, hogy jogosult annak terjesztésére. A módosítás beküldésével elfogadja, hogy az bekerülhet a projektbe, és a projekt licencfeltételei szerint továbbterjeszthető. A beküldőnek tudatában kell lennie, hogy az ő felelőssége, hogy ne küldjön be engedély nélküli kódot.

Ez független attól, hogy AI-t használtak-e vagy sem.

Módosítási kérelem beküldésekor természetesen ügyelni kell arra, hogy a javaslat jó minőségű legyen, a lehető legjobb szándékot tükrözze, és megfeleljen az irányelveinknek. Alapszabály: ha bárki felismeri, hogy AI segítségével készült, akkor még érdemes dolgozni rajta.

Elfogadunk AI által generált kódot a projektben, de annak meg kell felelnie a kódolási szabványoknak, legyen áttekinthető, dokumentált, tartalmazzon teszteseteket, és minden egyéb követelménynek is eleget kell tennie.

Recording acting users

Use acting_user_context(user) from weblate.utils.change_origin around operations that change model settings outside an authenticated request. Request authentication establishes this context automatically. Models read the actor with get_acting_user(); they no longer retain acting_user attributes. Nested contexts restore the previous actor, and passing None explicitly clears it. Use the anonymous user for intentional anonymous changes and the appropriate bot for automated operations.

Continue passing an explicit user when recording history. The actor context does not supply missing users to Change automatically and does not replace permission checks or content authorship. Pending file writes retain their own persisted actors and authors.

Wrap deferred transaction callbacks with capture_change_origin() when registering them. This captures both the origin and actor before their scopes exit. Celery tasks propagate the actor through a separate internal header; only the user identifier is serialized. Origin metadata stored in history does not include this identifier. Tasks with an invalid or deleted actor fail without executing their body.