Glossary support in 57 MT engines and LLMs
We run a dedicated test for each of three types of glossary support, because advertised support is not always present, often comes with limits, and can fail without an error.
Which MT engines and LLMs support glossaries?
Of the 57 models we evaluated, 42 have a way to take a glossary and 15 have none. For the LLMs we use retrieval-augmented generation (RAG): we insert the terms found in each segment into the prompt with the instruction to translate them exactly as specified. DeepL, Google Cloud Advanced, Google Translation LLM, ModernMT, SYSTRAN and Tilde take a glossary uploaded in advance, and Widn AI, ALL-Lab, Supertext and Yandex a dynamic glossary sent with each request, each with limits by language. For each target language, we use Intento Language Hub to deliver the same glossary through these different interfaces.
Glossary support has limits missing from the vendor documentation
Some models reject a glossary for some languages. Yandex rejects it for Belarusian, Ukrainian and Serbian in Latin script, Google Translation LLM for Serbian in Latin script, and DeepL for Belarusian and Serbian. ModernMT accepts a glossary for Arabic but does not apply any of its terms.
Both Google models return their internal glossary markup as visible text in one segment of every translation with a glossary. We score the translation as returned, because that is what a customer calling the API receives.
Terms set up inside a vendor account are a different mechanism from a glossary sent with the request. Tilde takes its terms that way, and the same request sent from another account comes back without them.
The glossary holds nouns, our matcher is case-sensitive, and we count declined forms as applied
The glossary holds nouns and noun phrases. When we chose the 46 terms we left out verbs, proper nouns that stay as they are, and generic vocabulary, so no model has to inflect a verb from a glossary entry.
SYSTRAN assigns a part of speech to each glossary entry itself and treats entries as hints. It never applies some exact matches, inflects the terms it inserts, and with a dictionary attached returns different output from run to run.
Our matcher is case-sensitive and matches whole words. For RAG and the dynamic glossary we send a term to the model only when the segment contains it in the casing used in the glossary, so a term in a different form in the source is not sent. Yandex also applies each term pair only as an exact match.
In scoring we accept a glossary term in any inflected or compound form, as long as its words stay. A synonym or a paraphrase is a miss. So is an abbreviation where the glossary has the full term, or the full term where the glossary has an abbreviation. LLMs often leave out an abbreviation in brackets that the glossary adds and the English source lacks, such as (IB) or (TSM).
Glossary support by model
| Model | Vendor | Type | Glossary languages reached (of 16) | What we found |
|---|---|---|---|---|
| Retrieval-augmented generation (RAG) via prompt inserts (30 models) | ||||
| AI21 Jamba Large 1.7 | AI21 | LLM | 16 | |
| Alibaba Cloud Qwen3-235B-A22B | Alibaba | LLM | 16 | |
| Anthropic Claude Fable 5 | Anthropic | LLM | 16 | |
| Anthropic Claude Haiku 4.5 | Anthropic | LLM | 16 | |
| Anthropic Claude Opus 4.8 | Anthropic | LLM | 16 | |
| Anthropic Claude Sonnet 4.6 | Anthropic | LLM | 16 | |
| Anthropic Claude Sonnet 5 | Anthropic | LLM | 16 | |
| Apertus-8B-2509 | Swiss AI (Apertus) | LLM (open-source) | 16 | |
| Cohere Command A (command-a-translate-08-2025) | Cohere | LLM | 16 | |
| Cohere Tiny Aya | Cohere | LLM | 16 | |
| DeepSeek V3.2 | DeepSeek | LLM | 16 | |
| GLM-5 | z.ai | LLM | 16 | |
| Google Gemini 3.1 Pro Preview | LLM | 16 | ||
| Google Gemini 3.5 Flash | LLM | 16 | ||
| Google Gemma 4 | LLM (open-source) | 16 | ||
| Grok 4.20 (non-reasoning) | xAI | LLM | 16 | |
| Grok 4.20 (reasoning) | xAI | LLM | 16 | |
| M2.5 | MiniMax | LLM | 16 | |
| Meta Llama 4 Maverick | Meta | LLM (open-source) | 16 | |
| Mistral Large 3 | Mistral | LLM | 16 | |
| Mistral Medium 3.1 | Mistral | LLM | 16 | |
| MoonshotAI Kimi K2.5 | MoonshotAI | LLM | 16 | |
| OpenAI GPT-4.1 | OpenAI | LLM | 16 | |
| OpenAI GPT-5.5 | OpenAI | LLM | 16 | |
| OpenAI GPT-5.6 Luna | OpenAI | LLM | 16 | |
| OpenAI GPT-5.6 Sol | OpenAI | LLM | 16 | |
| OpenAI GPT-5.6 Terra | OpenAI | LLM | 16 | |
| OpenAI gpt-oss-120b | OpenAI | LLM (open-source) | 16 | |
| SpeakLeash Bielik-11B-v3.0-Instruct | SpeakLeash | LLM (open-source) | 16 | Bielik-11B applied the glossary while ignoring the tone instruction: in German the share of glossary terms found in the output rose from 35% to 76% with the glossary. |
| Translated Lara 2 | Translated | NMT (LLM) | 16 | Translated Lara 2 takes the terms found in each segment, and the tone and gender instructions, in a free-text instructions field. |
| A glossary uploaded in advance (6 models) | ||||
| DeepL Next Gen | DeepL | NMT (LLM) | 14 | DeepL Next Gen takes the glossary for 14 of the 16 languages: the glossary API rejects Belarusian and Serbian. With the glossary, the share of glossary terms found in the output rose from 53% to 79%. |
| Google Cloud Advanced Translation API | NMT | 16 | Google Cloud Advanced Translation takes the glossary for all 16 languages. With it, the share of glossary terms found in the output rose from 55% to 99%. In one segment of every translation made with a glossary, the matched terms come back wrapped in internal Google markup as visible text, and we score the translation as returned. | |
| Google Translation LLM | NMT (LLM) | 15 | Google Translation LLM rejects Serbian in Latin script. A glossary uploaded for the classic Google API does not apply to it: it needs its own glossary setting in the request. With a glossary the response carries two texts, and only the second has the glossary terms applied. With the glossary, the share of glossary terms found in the output rose by 40 points in 14 of the 16 languages. Same visible markup as the classic API in one segment. Its Korean translation with the glossary fell into a repetition loop and is excluded from scoring. | |
| ModernMT Enterprise Edition | ModernMT | NMT | 15 | ModernMT does not apply a glossary for Arabic. A glossary works only from the account it was uploaded to: the same id sent from another account resolves to nothing. The import runs in the background, and the id is empty until it completes. With the glossary, the share of glossary terms found in the output rose by 39 points in 15 of the 16 languages. |
| SYSTRAN PNMT API | SYSTRAN | NMT | 14 | SYSTRAN PNMT takes the glossary as a user dictionary plus a translation profile on a SYSTRAN account, referenced by id. No glossary for Belarusian and Serbian in Latin script in this benchmark. SYSTRAN assigns a part of speech to each entry itself and treats entries as hints: it never applies some exact matches, and it inflects the terms it inserts. With a dictionary attached the output varies from run to run. With the glossary, glossary terms appeared more often in 12 of the 14 languages, with Arabic and Dutch flat. |
| Tilde | Tilde | NMT (LLM) | 11 | Tilde takes terms set up in the vendor console on its custom model, not sent with the request, so the same request from another account comes back without them. With them, the share of glossary terms found in the output rose from 48% to 69%, measured on 11 language pairs. |
| Dynamic glossary in the request: the terms found in each segment, sent as a list of term pairs (Widn AI, ALL-Lab), a dictionary (Supertext) or exact-match term pairs (Yandex) (6 models) | ||||
| ALL-Lab | ALL-Lab | NMT | 16 | ALL-Lab takes the terms found in each segment as a list in the request, and ALL-Lab has no free-text field for a gender instruction. |
| Supertext Supertext LLM | Supertext | NMT (LLM) | 16 | Supertext takes the terms found in each segment as a dictionary in the request, and Supertext has no field for a gender instruction. |
| Widn AI Tower Anthill | Widn AI | NMT (LLM) | 16 | Widn AI Tower Anthill takes the terms found in each segment as a list in the request, and the gender instruction in a free-text instructions field. |
| Widn AI Tower Sugarloaf | Widn AI | NMT (LLM) | 16 | Widn AI Tower Sugarloaf takes the terms found in each segment as a list in the request, and the gender instruction in a free-text instructions field. |
| Widn AI Tower Vesuvius | Widn AI | NMT (LLM) | 16 | Widn AI Tower Vesuvius takes the terms found in each segment as a list in the request, and the gender instruction in a free-text instructions field. |
| Yandex | Yandex | NMT | 13 | Yandex takes the glossary as term pairs inside each request, matched exactly. Yandex rejects a glossary for Belarusian, Ukrainian and Serbian in Latin script. With the glossary, the share of glossary terms found in the output rose by 35 points in 13 of the 16 languages. |
| No glossary support (15 models) | ||||
| Alibaba | Alibaba | NMT | 0 | |
| Amazon | Amazon | NMT | 0 | |
| AppTek NMT | AppTek | NMT | 0 | |
| Baidu | Baidu | NMT | 0 | |
| Elia Elhuyar Machine Translation System | Elia | NMT | 0 | |
| iFlyTek MT | iFlyTek | NMT | 0 | |
| Microsoft Translator | Microsoft | NMT | 0 | Microsoft Translator takes glossaries as phrase dictionaries compiled into a custom model during training, and in the request only as inline markup, documented for proper names and product names. We tested the stock model, so without a glossary. |
| Naver Papago NMT Commercial | Naver | NMT | 0 | Naver Papago has no glossary support and takes a tone setting for Korean and Japanese only. |
| NiuTrans | NiuTrans | NMT | 0 | |
| Oracle | Oracle | NMT | 0 | |
| Pangeanic | Pangeanic | NMT | 0 | |
| Tarjama | Tarjama | NMT | 0 | |
| TartuNLP | TartuNLP | NMT | 0 | |
| Tencent Cloud TMT | Tencent | NMT | 0 | |
| Youdao | Youdao | NMT | 0 | |
Glossary languages reached: the languages, of the 16 with a glossary, for which the model accepted the glossary. For RAG and the dynamic glossary our matcher selects the terms per segment, case-sensitive and on whole words only. Shares of glossary terms found in the output are exact-form counts from our delivery check, not the terminology scores of Intento LQA. Whether the model translates a language at all is a separate question, answered in the Models chapter.