Izdanja i OTA
Izvoz je fajl koji komitujete. Izdanje je snimak koji vaša aplikacija preuzima. Izdanja služe da promenite prevod bez nove verzije aplikacije.
Pravljenje izdanja
heading.anchorLabelSa kartice Izdanja projekta, ili GraphQL mutacijom createRelease. Izdanje uzima odobrene prevode projekta onakve kakvi su u ovom trenutku i zamrzava ih.
| Polje | Značenje |
|---|---|
version | Dodeljuje se automatski, raste u okviru projekta |
name, description | Vaši, da kažete šta se promenilo |
splitByFiles | Da li je paket grupisan po fajlovima — vidite ispod |
languages | Koji su jezici završili u paketu |
segmentCount | Koliko ključeva nosi najpuniji jezik |
Unutra ulaze samo prevodi u statusu approved. Jezik koji niko nije dovršio pojavljuje se sa gotovim ključevima i ničim drugim, pa nedovršen jezik ne blokira izdanje — ali vredi pogledati napredak pre nego što ga napravite.
Oblik paketa
heading.anchorLabelPodrazumevano je paket ravna mapa ključa u vrednost, po jedna mapa za svaki jezik, pri čemu izvorni jezik nosi izvorne tekstove:
{ "en": { "home.title": "Hello" }, "sr": { "home.title": "Zdravo" }}Sa splitByFiles, ključevi su grupisani po fajlu iz kog su došli:
{ "en": { "5f1c…": { "home.title": "Hello" } }, "sr": { "5f1c…": { "home.title": "Zdravo" } }}Ravan oblik koristite kada aplikacija učitava po jedan rečnik za svaki jezik, a podeljeni kada učitava jedan imenski prostor odjednom.
Segment sa oblicima množine nosi celu mapu oblika kao vrednost, pa množina preživljava izdanje netaknuta.
Duplirani ključevi
heading.anchorLabelKljuč je jedinstven unutar svog fajla, a ne unutar projekta, pa dva fajla mogu oba imati title. U ravnom paketu takav ključ može se pojaviti samo jednom, pa se uzima iz fajla koji je poslednji po redosledu putanje i imena, i svi jezici dolaze iz tog istog fajla: ako taj fajl nema odobren prevod za neki jezik, ključa u tom jeziku nema, čak i kada drugi fajl ima prevod. Izdanje to beleži u duplicateKeys: ključ, fajlove u kojima živi i usedFrom, poslednji fajl iz kog je vrednost uzeta. Spisak se vraća uz izdanje i prikazuje u interfejsu.
Taj izveštaj vredi pročitati pri prvom izdanju projekta razloženog na mnogo fajlova. Ili preimenujte ključeve u sudaru, ili prebacite izdanje na splitByFiles: u paketu podeljenom po fajlovima svaki fajl zadržava svoju vrednost, a duplicateKeys je prazan.
OTA distribucija
heading.anchorLabelSvaki projekat ima jednu distribuciju: trajni pristupni ključ koji njegova izdanja servira preko HTTP-a bez autentifikacije.
Nađite ga u Izdanja → Distribucija, ili GraphQL upitom releaseDistribution. Ako ključ procuri, regenerišite ga — stari prestaje da radi odmah, a svim klijentima treba novi.
Krajnje tačke
heading.anchorLabelGET https://api.ownlate.com/public/v1/ota/{accessKey}/manifestGET https://api.ownlate.com/public/v1/ota/{accessKey}/bundlesGET https://api.ownlate.com/public/v1/ota/{accessKey}/bundles/{language}Manifest je mali i jeftin za povremeno proveravanje:
{ "version": 7, "languages": ["en", "sr", "de"], "publishedAt": "2026-08-20T09:31:00Z" }Krajnje tačke paketa vraćaju prevode, za sve jezike ili za jedan:
{ "version": 7, "language": "sr", "splitByFiles": false, "publishedAt": "2026-08-20T09:31:00Z", "translations": { "home.title": "Zdravo" }}Sve tri podrazumevano serviraju poslednje izdanje. Dodajte ?version=5 da se zakačite za starije — korisno kada stara verzija aplikacije očekuje ključeve kojih u tekućem izdanju više nema.
Keširanje
heading.anchorLabelOdgovori nose ETag izveden iz verzije i vremena objave. Pošaljite If-None-Match i nepromenjeni paket odgovara sa 304 Not Modified bez tela. Paketi se komprimuju kada klijent kaže da to prihvata, a i komprimovani oblik se kešira.
Razuman klijent traži manifest pri pokretanju, poredi verziju sa sačuvanom i preuzima paket samo kada se razlikuju.