Máte řetězec nebo malý objekt s řetězci, který potřebujete hned teď v jiném jazyce – popisek formuláře, notifikace, krátký blok UI textu, na který uživatel čeká. Nechcete kvůli jednomu překladu rozjíždět webhook endpoint ani dotazovat job. Chcete text odeslat a rovnou dostat překlad zpět.
Právě k tomu slouží synchronní endpoint Localize: jeden požadavek, zpátky přeložená data ve stejné struktuře. Pošlete obsah klíč–hodnota metodou POST se zdrojovým a cílovým jazykem, volání po dobu překladu blokuje a odpověď vrátí stejný objekt s přeloženými hodnotami a nezměněnou strukturou. Není tu žádný job ke sledování ani druhé volání navíc.
Nejde o žádné generické volání modelu. Všechno běží přes lokalizační engine, který jste nastavili – jeho glosář, hlas značky, instrukce a výběr modelu pro jednotlivé jazyky – tedy stejný engine, který používá i async API. Rozdíl je jen ve formě: async rozprostře jeden požadavek do více jazyků a výsledky vrací průběžně, zatímco toto volání zpracuje jeden jazykový pár a vrátí ho inline.
Stačí vám jeden jazyk a nevadí vám blokující volání? Jste na správné stránce.
Po tomto endpointu sáhněte, když potřebujete jeden jazykový pár a můžete počkat na jedno volání tam a zpět. Pokud máte více cílových jazyků, delší obsah nebo chcete mít chyby izolované pro každý jazyk zvlášť, async Localization API přijme jeden požadavek, okamžitě vrátí 202 a každý jazyk zpracuje jako samostatný odolný workflow na pozadí. Je tu ještě jeden rozdíl vedle latence: lokalizační pipeline – pre-edit, human review, back-translation a další nepovinné fáze – běží jen u async jobů. Toto synchronní volání konfiguraci pipeline ignoruje.
Na této stránce
Požadavek#
POST /process/localizeOvěřte se pomocí hlavičky X-API-Key. Klíče jsou vázané na organizaci a mají přístup ke každému engine ve vaší organizaci – kde je vygenerovat, najdete v části Authentication, a úplný model chyb v části Errors and status codes.
| Parametr | Typ | Popis |
|---|---|---|
engineId | string (nepovinné) | ID lokalizačního engine (eng_...). Pokud ho neuvedete, použije se výchozí engine vaší organizace. |
sourceLocale | string | Zdrojový jazyk BCP-47 (např. en). |
targetLocale | string | Cílový jazyk BCP-47 (např. de). |
data | object | Obsah klíč–hodnota k překladu. Podporované jsou i vnořené objekty a pole; odpověď zrcadlí přesně tu strukturu, kterou odešlete. |
context | string (nepovinné) | Širší kontext pro tento překladový payload, například část produktu, publikum nebo účel. Platí pro celý požadavek. |
hints | object (nepovinné) | Kontextové nápovědy pro jednotlivé klíče. Klíče odpovídají klíčům data; hodnoty jsou pole breadcrumb řetězců (např. { "nav.home": ["Navbar", "Home link"] }), která engine říkají, kde daný řetězec žije, aby správně rozlišil krátké nebo víceznačné texty. |
{
"engineId": "eng_abc123",
"sourceLocale": "en",
"targetLocale": "de",
"data": {
"greeting": "Hello, world!",
"cta": "Get started"
},
"hints": {
"cta": ["Landing page", "Primary button"]
}
}Odpověď#
Odpověď vrací přeložený obsah ve stejné struktuře, jakou jste poslali, plus model, který ho vytvořil, a cenu za daný požadavek. Vrátí se stejné klíče, ve stejném vnoření – váš kód si tak může překlad vyčíst ze struktury, kterou už zná.
| Pole | Typ | Popis |
|---|---|---|
sourceLocale | string | Zdrojový jazyk BCP-47 převzatý z požadavku. |
targetLocale | string | Cílový jazyk BCP-47 převzatý z požadavku. |
data | object | Přeložený obsah klíč–hodnota odpovídající vstupní struktuře. |
model | string (nepovinné) | LLM model, který tento překlad vytvořil, ve formátu provider/model (např. anthropic/claude-sonnet-4.5). Díky tomu víte, který model z vašeho fallback řetězce se skutečně spustil. Chybí, pokud neproběhlo žádné LLM volání – viz callout níže. |
usage | object (nepovinné) | Počty tokenů a cena za požadavek v USD. Chybí, pokud neproběhlo žádné LLM volání. |
Objekt usage rozepisuje cenu volání po položkách, takže můžete náklady přiřadit bez samostatného dotazu do billing systému:
| Pole | Typ | Popis |
|---|---|---|
inputTokens | number | Celkový počet vstupních tokenů spotřebovaných napříč všemi chunky. |
outputTokens | number | Celkový počet výstupních tokenů vygenerovaných napříč všemi chunky. |
cacheReadTokens | number | Vstupní tokeny obsloužené z providerovy cache promptů, pokud je model vykazuje. |
cacheWriteTokens | number | Vstupní tokeny zapsané do providerovy cache promptů, pokud je model vykazuje. |
llmCost | number | Náklady upstream providera LLM v USD. 0, pokud žádné náklady nebyly nahlášeny. |
localizationCost | number | Cena Lingo.dev za token v USD, vypočtená z outputTokens. |
cost | number | Celková cena požadavku v USD (llmCost + localizationCost). |
{
"sourceLocale": "en",
"targetLocale": "de",
"data": {
"greeting": "Hallo, Welt!",
"cta": "Jetzt starten"
},
"model": "anthropic/claude-sonnet-4.5",
"usage": {
"inputTokens": 2789,
"outputTokens": 861,
"cacheReadTokens": 0,
"cacheWriteTokens": 0,
"llmCost": 0.02129,
"localizationCost": 0.001722,
"cost": 0.023012
}
}Když `model` a `usage` chybí
Pokud je data prázdné – tedy nejsou žádné klíče k překladu – endpoint se ukončí předčasně bez volání LLM a v odpovědi vynechá model i usage. Je to jediný případ, kdy pole s cenou chybí, a důvod je jednoduchý: nevznikly žádné náklady, protože se nic nepřekládalo. Každý požadavek, který skutečně spustí překlad, obsahuje obě pole. Ve svém parseru s nimi proto pracujte jako s nepovinnými a prázdný vstup vás nepřekvapí.
Příklady#
Stejné volání v pěti jazycích. Kvůli přehlednosti každý příklad posílá plochý objekt; data ale přijímá i vnořené objekty a pole a odpověď se vrátí v přesně té struktuře, kterou odešlete.
const response = await fetch(
"https://api.lingo.dev/process/localize",
{
method: "POST",
headers: {
"X-API-Key": "your_api_key",
"Content-Type": "application/json",
},
body: JSON.stringify({
engineId: "eng_abc123",
sourceLocale: "en",
targetLocale: "de",
data: {
greeting: "Hello, world!",
cta: "Get started",
},
}),
}
);
const { data } = await response.json();
// { greeting: "Hallo, Welt!", cta: "Jetzt starten" }Co se děje při lokalizaci#
Jediný POST v sobě skrývá sérii kroků a stojí za to vědět, jakých – právě díky nim je výstup konzistentní se zbytkem vašeho lokalizovaného obsahu, místo aby šlo jen o jednorázový odhad modelu. Když požadavek dorazí na endpoint, engine postupně použije celou svou konfiguraci:
Výběr modelu – Vybere LLM model s nejvyšší prioritou, který odpovídá danému jazykovému páru. Modely specifické pro konkrétní jazyk mají přednost před wildcard modely (
*). Pokud primární model selže, engine automaticky přejde na další model v pořadí.Hlas značky – Načte hlas značky pro cílový jazyk, a pokud pro něj neexistuje specifická varianta, použije wildcard hlas značky.
Instrukce – Načte všechny instrukce odpovídající cílovému jazyku, včetně wildcard instrukcí.
Vyhledání v glosáři – Rozdělí vstupní hodnoty na prohledávatelné chunky, vygeneruje embeddingy a provede vyhledávání podle vektorové podobnosti v glosáři engine. Nalezené termíny vynutí přesné překlady nebo je označí jako nepřeložitelné, takže projdou beze změny.
Generování – Odešle sestavený prompt vybranému modelu a potom zparsuje a ověří JSON odpověď.
Jde o stejnou pipeline kroků engine, kterou async API spouští pro každý job. Když místo async použijete sync, mění se způsob doručení, ne to, jak se překlad vytváří – takže řetězec přeložený tady i tentýž řetězec přeložený v async jobu skončí na stejných termínech v glosáři a se stejným hlasem.
Fallback modelu je automatický a odpověď vám prozradí, který model běžel
Pokud primární model selže, engine zkusí další model podle pořadí priority. Děje se to transparentně – struktura odpovědi je stejná bez ohledu na to, který model překlad vytvořil. Jediným signálem fallbacku je pole model v odpovědi: podívejte se na něj, když potřebujete přesně vědět, který model z vašeho řetězce daný požadavek zpracoval.
