Integrációk
Az integráció egy projektet — vagy egy egész munkaterületet — köt össze valamivel az Ownlate-en kívül. Mindegyik egy szolgáltatóból, egy konfigurációból és hitelesítő adatokból áll, amelyeket tárolás előtt titkosítunk, és amelyeket az API soha nem ad vissza.
| Kategória | Szolgáltatók |
|---|---|
| Verziókezelés | GitHub, GitLab |
| Gépi fordítás | OpenAI, Anthropic, Mistral, DeepL, Google, Azure — lásd AI-fordítás |
| Értesítések | Slack, Microsoft Teams, Discord, Mattermost, Matrix, Telegram |
| Webhookok | Általános webhook |
Integráció kezelése
Szekció neve “Integráció kezelése”Az integrációk a projekt Integrációk lapján élnek, a munkaterület-szintűek pedig a Munkaterület → Integrációk alatt.
| Művelet | Mit tesz |
|---|---|
| Tesztelés mentés előtt | Ellenőrzi a beírt hitelesítő adatokat anélkül, hogy tárolná őket |
| Tesztelés | Ellenőriz egy mentett integrációt |
| Szüneteltetés | Megtartja a beállítást, de leállítja a működést |
| Aktiválás | Visszakapcsolja a szüneteltetettet |
| Szinkronnaplók | Minden futás sorról sorra, az eredményével |
A hatókör dönti el az elérést. A project hatókörű integráció egy projektet szolgál ki, a workspace hatókörű a munkaterület minden projektje számára elérhető. Gépi fordításnál a saját integráció nélküli projekt a munkaterületére esik vissza. Webhookoknál a munkaterület-szintűek csak akkor sülnek el, ha a projektnek nincs sajátja. Az értesítéseket projekt hatókörű integrációk küldik.
Amit egy integráció tesz, az bekerül a szinkronnaplójába, a hibákkal együtt — így a meg nem érkezett webhook megkülönböztethető attól, amelyet el sem küldtünk.
Git: GitHub és GitLab
Szekció neve “Git: GitHub és GitLab”A verziókezelő integráció egy repository-URL-t, egy ágat (alapértelmezésben main) és egy hozzáférési tokent vár.
Szinkronizálás
Szekció neve “Szinkronizálás”Szinkronizáláskor az Ownlate beolvassa az ág gyökeréből az ownlate.yml — vagy ownlate.yaml — fájlt. Ez ugyanaz a fájl, amelyet a CLI használ:
project_id: 00000000-0000-0000-0000-000000000000
files: - source: locales/en.json translation: locales/{lang}.jsonMinden hozzárendeléshez lehúzza a forrásfájlt a repositoryból, és feltölti, pontosan úgy hozva létre és frissítve a szegmenseket, ahogy egy kézi feltöltés tenné. A konfigurációban felsorolt, de a repositoryból hiányzó fájlt kihagyja, és feljegyzi a naplóba; a konfiguráció nélküli repository semmit sem szinkronizál, és ezt ki is írja.
A files[].translation értékének tartalmaznia kell a {lang} helyőrzőt — ez a minta, amely szerint a lefordított fájlok visszaíródnak.
A szinkron a háttérben fut. Kézzel az integrációk lapról indítható, API-n keresztül pedig a PATCH /v1/workspaces/{workspaceId}/integrations/{id}/sync hívással.
Pull requestek
Szekció neve “Pull requestek”A PR létrehozása a másik irányba dolgozik: az Ownlate exportálja a kiválasztott nyelvek jóváhagyott fordításait, kiírja őket az ownlate.yml-ből vett útvonalakra, feltol egy új ágat, és pull requestet nyit — GitLabon merge requestet. A válasz tartalmazza az URL-t, így egy pipeline fel tudja venni.
A tokennek elegendő jogosultság kell ahhoz, hogy olvassa a repositoryt, ágat toljon fel és pull requestet nyisson.
Értesítések
Szekció neve “Értesítések”Hat chatcélpont, mindegyik az adott platform saját stílusában megformázva — Block Kit üzenet Slacken, MessageCard a Teamsben, és így tovább.
| Szolgáltató | Mit kér |
|---|---|
| Slack | Incoming webhook URL |
| Microsoft Teams | Connector URL |
| Discord | Webhook URL |
| Mattermost | Webhook URL |
| Telegram | Bot token, chatazonosító |
| Matrix | Homeserver-cím, szobaazonosító, hozzáférési token |
Az üzenetek a kulcsot, a nyelvet, a forrásszöveget és az új fordítást hordozzák, valamint egy hivatkozást egyenesen a szegmensre az Ownlate-ben.
Webhookok
Szekció neve “Webhookok”A webhook-integráció egy URL-t és egy opcionális titkot vár, és JSON-t küld rá:
{ "event": "translation.approved", "payload": { "segmentId": "…", "projectId": "…", "workspaceId": "…", "language": "de", "key": "home.title", "sourceText": "Hello", "translationText": "Hallo", "actorId": "…", "authorId": "…", "approvedAt": "2026-08-20T09:31:00Z" }, "timestamp": "1787654321000"}Minden kézbesítés ezeket a fejléceket hordozza:
| Fejléc | Tartalom |
|---|---|
X-Ownlate-Event | Az esemény neve |
X-Ownlate-Timestamp | Ezredmásodperc az epoch óta, ugyanaz az érték, mint a törzsben |
X-Ownlate-Signature | sha256=…, csak akkor, ha van beállított titok |
Az aláírás ellenőrzése
Szekció neve “Az aláírás ellenőrzése”Az aláírás HMAC-SHA256 az időbélyeg, egy pont és a nyers kéréstörzs fölött, a titokkal mint kulccsal:
const expected = 'sha256=' + crypto .createHmac('sha256', secret) .update(`${req.headers['x-ownlate-timestamp']}.${rawBody}`) .digest('hex')Vesse össze az X-Ownlate-Signature értékével állandó idejű összehasonlítással, és utasítsa el azt az időbélyeget, amely már túl régi ahhoz, hogy hihető legyen.
Események
Szekció neve “Események”Az értesítési és webhook-integrációk ezekre reagálnak:
| Esemény | Mikor |
|---|---|
translation.submitted | Egy fordítást lektorálásra küldtek |
translation.reviewed | Egy lektor átnézettnek jelölt egyet |
translation.approved | Egy fordítást jóváhagytak |
translation.rejected | Egy fordítást elutasítottak |
segment.created | Új szegmens került a projektbe |
Alapból az integráció mindet megkapja. Állítson be rá eseményszűrőt, hogy szűkítse — egy Slack-csatorna, amely csak a jóváhagyásokat kéri, egy webhook, amelyet csak az új kulcsok érdekelnek.