|
Documentation
Book a DemoPlatform
Platform
MCPCLIAPIWorkflows
GuidesChangelog

Getting Started

  • Introduction
  • Connect Your Engine

Localization Engine

  • Overview
  • Brand Voices
  • Rules
  • Glossaries
  • LLM Models
  • Cache Tokens
  • Locale Resolution

Quality

  • Reports
  • AI Reviewers
  • Playground
  • Engine Suggestions

Admin

  • API Keys
  • Team
  • Roles & Permissions
  • Audit Logs

Glossaries

A glossary gives the localization engine exact control over specific terms - either enforcing a precise translation or preventing translation entirely. Glossary terms take precedence over the model's own judgment, so the engine applies them consistently across every request.

A glossary is organization-owned: a named container holding terms, applied to a localization engine by attachment. One glossary can govern every engine that needs it, and an engine can apply several.

How it works#

ObjectFields
GlossaryName, description, the source locales it covers. Holds any number of terms.
TermSource locale, target locale, source text, target text, type, hint.

When the engine processes a translation request, it retrieves relevant terms from every attached glossary using semantic search - matching the meaning of the input text against stored source terms, not exact strings.

FieldDescription
Source localeThe locale of the source text, or * for any source
Target localeThe locale of the target text, or * for any target
Source textThe term in the source language
Target textThe required translation (or the same term, for non-translatables)
Typecustom_translation or non_translatable
HintOptional context to disambiguate the term (e.g., "noun, the product feature")

Glossaries are organization-owned#

ActionEffect
Create a glossaryIt exists at organization level and applies to nothing until attached
Attach it to an engineEvery term in it is retrievable for that engine's translations
Attach it to several enginesThe same terms govern all of them - edit once, every engine follows
Attach several glossaries to one engineTheir terms combine into one retrieval pool
Detach it from an engineThe engine stops applying it. The glossary and its terms are kept.
Delete a glossaryRefused while any engine still applies it - detach first. Deleting takes its terms with it.
Delete an engineGlossaries and terms survive. They belong to the organization, not the engine.

Attachment order carries no meaning. When two attached glossaries define the same source text for the same locale pair, either may win - keep one term in one place.

Manage glossaries under Glossaries in the organization sidebar. An engine's Glossary tab lists the terms it currently applies and attaches or detaches glossaries.

Source locales#

A glossary declares which source locales it covers. A custom_translation whose source locale is not one of them is refused on write - on every path, including the dashboard, the API, an applied engine suggestion, and provisioning. The check uses the same permissive locale match as read time, so a glossary covering en accepts an en-US term.

Leave the source locales empty and the glossary accepts any source locale.

Non-translatables are exempt: there is no source-language translation to bind. They are also stored once against a wildcard target locale, whatever target you send - the term is protected in every language, so per-locale copies would be duplicates.

Glossary types#

Custom translations#

Force a specific translation for a term. The engine always uses your translation instead of the model's.

Source textTarget textSource localeTarget locale
DeployBereitstellenende
911112ende
workspaceespace de travailenfr

Use custom translations for:

  • Product terminology with established translations
  • Cultural adaptations (emergency numbers, measurement units)
  • Terms where the model consistently picks the wrong synonym

Non-translatables#

Prevent a term from being translated. The engine keeps the source text as-is, in every target locale.

Source textTarget textType
Lingo.devLingo.devnon_translatable
OAuthOAuthnon_translatable
GraphQLGraphQLnon_translatable

Use non-translatables for:

  • Brand names and product names
  • Technical protocols and standards
  • Proper nouns that should remain in the source language

Semantic matching#

Glossary terms are matched by meaning, not exact string comparison. When the engine receives a translation request, it generates embeddings for the input text and finds terms with semantically similar source text.

This means a term for "Deploy" also matches "Deploying", "deployment", and "deploy your application" - without separate entries for each variation.

Hint field

Use the hint field to disambiguate terms with multiple meanings. For example, a term for "bank" with hint "financial institution" won't match "river bank" in the input text.

Wildcard locales#

Set source or target locale to * to apply a term across all locale pairs.

Common patterns:

Source textSource localeTarget localeUse case
Lingo.dev**Never translate the brand name in any language
APIen*Keep "API" untranslated across all target locales
DeployendeUse specific German translation for this English term

Wildcard terms and locale-specific terms combine - they don't override each other.

Locale matching#

Glossary terms match across regional variants, not just exact locale codes. A de term applies to de-DE; a de-DE term applies to a bare de request. Siblings like de-DE and de-AT never share terms. When several match, the CLDR default region wins. The same rules drive brand voices, rules, and model configs. See Locale Resolution for the full behavior, including the script-safety rule for custom translations.

Glossary vs. rules vs. brand voices#

Each serves a distinct purpose in the engine's configuration:

GlossaryRuleBrand Voice
ControlsIndividual termsLinguistic conventionsOverall tone and style
GranularityPer-termPer-rulePer-locale text
MatchingSemantic (by meaning)All matching rules includedThe single best-matching text
PrecedenceHighest - overrides model judgmentMedium - guides the modelLowest - sets context
Example"Deploy" → "Bereitstellen""Abbreviate Straße to Str.""Use informal du, technical tone"

All three are organization-owned containers an engine applies by attachment: glossaries hold terms, rulesets hold rules, and a brand voice holds one text per locale.

Rule precedence

Glossary terms take the highest precedence in the engine's hierarchy. If a glossary term conflicts with a rule, the glossary wins. Design rules to complement the glossary, not duplicate it.

Using glossaries with the API#

Glossary terms are applied automatically when you call the localize endpoint. The engine retrieves semantically relevant terms for the source and target locale pair from the glossaries it applies and includes them in the prompt. No additional parameters are needed.

CallPurpose
POST /glossariesCreate a glossary for the organization
GET /organizations/:id/glossariesList the organization's glossaries with term and engine counts
GET /glossaries/:id/glossary-itemsList a glossary's terms, grouped by source text
POST /glossary-items with glossaryIdAdd a term to a glossary
PUT /engines/:id/glossariesReplace the set of glossaries an engine applies
DELETE /engines/:id/glossaries/:glossaryIdStop applying one glossary to an engine
GET /engines/:id/glossary-itemsList every term an engine currently applies

ownerEngineId on POST /glossary-items still works - it writes into the engine's default glossary. Prefer glossaryId.

Access#

org:glossary:read and org:glossary:edit govern glossaries and the terms inside them; attaching one to an engine also needs engine:edit on that engine. A per-glossary grant gives someone read and edit on a single glossary instead of every glossary in the organization. See Roles & Permissions.

Managing glossaries via MCP#

If you use the Lingo.dev MCP server, your AI coding assistant can manage glossaries and their terms directly:

text
"Create a glossary called Product terms covering English, and
apply it to the web engine."
text
"Add a term: translate 'workspace' to 'espace de travail'
for English to French."
text
"Mark 'GraphQL' as non-translatable for all locales."

Next Steps#

Brand Voices
Define overall tone and formality per locale
Rules
Add linguistic rules grouped into rulesets
AI Reviewers
Monitor glossary compliance automatically
API Reference
Integrate the localization API into your workflow

Was this page helpful?

Max PrilutskiyMax Prilutskiy·Updated 2 days ago·6 min read