Translation is a context problem.

One English word can ship two different German translations. What decides between them is context — and GT assembles it from your code, your files, and the rules your team pins, then spends it on every translation.

without context
app/checkout/Toast.tsx
1<T>
2 <p>Payment received</p>
3 <button>Save</button>
4</T>

Zahlung erhalten

deSparen— spend less money

In a checkout, “Save” reads as the discount sense — plausible, and wrong for a toast that stores a receipt.

with context="checkout toast"
app/checkout/Toast.tsx
1<T context="checkout toast">
2 <p>Payment received</p>
3 <button>Save</button>
4</T>

Zahlung erhalten

deSpeichern— write it to disk

One attribute settles the sense: the toast stores, it doesn’t discount.

Context is assembled, not typed.

Four signals steer every translation: the vocabulary your team pins, the tone you set per locale, the file and markup around each string, and the tag at the call site.

Glossary — vocabulary, pinned

Key terms translate one way, everywhere they appear — or never translate at all. Decided once, per locale.

Locadexnever translatedproduct name
General Translationnever translatedproduct name
WorkflowesFlujo de trabajojaワークフロー
SettingsesConfiguracióndeEinstellungenja設定
SavedeSpeichernstore, not discount

Directives — tone, set per locale

Style rules ride along with every job: voice, formality, what never gets translated. Scoped to one locale or to all of them.

deUse formal “Sie”
all localesUse active voice, avoid jargon
all localesNever translate product names
toneplayful, upbeaten
toneformal “Sie”de

The voice that’s playful in English can be formal in German — both are the same product speaking.

The file is a signal

Translation happens on the JSX tree, not on bare strings — every entry ships with the file it lives in and the markup around it.

string"Save"
fileapp/checkout/Toast.tsx
parent<button>
sibling"Payment received"
context"checkout toast"

What travels with one string — before anyone types a word.

Context at every call site

Strings you can’t know at build time take the same steering — one option on the runtime call.

server.ts
1await tx('Spring', {
2 $context: 'the season, not a coil',
3});
esprimavera— the seasonresorte— a coil of metal
$context$maxChars$requiresReview$id

Cap its length, hold it for review, or give it a stable id — from the same call.

One group. Every translation.

Glossary, directives, and autogenerated project context assemble into a Context Group at the organization level. The group grows as the project grows — and every translation that follows draws from it.

sourcesevery translation draws from itglossary12 terms · pinneddirectives3 rules · per localecontext= tagsfrom your codeproject filesautogeneratednpx gt translatebuild timelocadexPR #218 · agenttx()runtimeTranslation EditorreviewContext Groupglossary12 termsdirectives3 rulesscopeorganizationassigned3 projects
glossary12 terms · pinned
directives3 rules · per locale
context= tagsfrom your code
project filesautogenerated
Context Group
glossary12 terms
directives3 rules
scopeorganization
assigned3 projects
npx gt translatebuild time
locadexPR #218 · agent
tx()runtime
Translation Editorreview

the same group, over one project’s life

v1.0.0glossary seeded4 terms
v2.0.0directives added9 terms
v2.1.0“Added checkout page translations”12 terms
todayassigned to 3 projectsone group

Applied on your terms.

Groups live at the organization and are assigned to projects. New translations draw from them automatically; what already shipped changes only when you say so.

Apply is a decision

Editing the glossary never rewrites your app behind your back. Existing translations change only when you press Apply.

new stringstranslated with the group
existing 42unchanged until Apply

The top group wins

Groups stack per project. When two pin the same term, priority is explicit — the higher group decides.

01glossary — 12 termsdirectives — 3
02glossary — 5 terms
Workflowワークフロー · group 01

Priced in the open

Project context is its own published line item, per token — you can see exactly what you’re buying.

build time$10 / 10k input tokens
project context+$0.10 / 10k per 500 tokens

Published rates, hard usage caps — never a surprise invoice.

Define it once.

Terminology and tone, set at the organization and obeyed by every translation — at build time, at runtime, and in every Locadex pull request.