Entity Enricher can produce enrichment results in up to 40 languages simultaneously. Multilingual fields are stored as language-keyed JSON objects — a format that is portable, queryable, and compatible with every major database.
In the schema editor, toggle the multilingual flag on any string or array-of-strings property. When enabled, the LLM returns values wrapped in a language-keyed object instead of a plain value.
multilingual: true in the JSON schema.multilingual: true). Use the ↑ button on any other chip to promote it as primary. The backend also filters out any stray language keys the LLM might emit that aren’t in your selection.dict[str, T], where keys are ISO 639-1 language codes and values match the field type.Multilingual values are stored as JSON objects with language codes as keys. This format was chosen over alternatives for its portability, queryability, and storage efficiency.
Fields without multilingual: true are returned as plain values. Identifiers, codes, URLs, dates, and numbers typically stay non-multilingual.
Two approaches exist for multilingual arrays. Entity Enricher uses Format A (language-keyed object) because it is the only format that works as-is across all major databases without transformation.
| Criteria | A Language-keyed object | B Array of localized items |
|---|---|---|
| Structure | {"en": [...], "fr": [...]} | [{"en": "x", "fr": "y"}, ...] |
| Query one language | Direct accessdata -> 'field' -> 'en' | Requires iterationjsonb_array_elements + extract |
| Add a language | Add one key to the object | Update every item in the array |
| Consistent with scalars | Yes — same {"en": "...", "fr": "..."} pattern | No — different shape for strings vs arrays |
| Database portability | All major databases | All major databases |
The language-keyed format is natively queryable in all major databases that support JSON columns.
40 languages are available. Select any combination when running an enrichment.
enEnglishzhChinesehiHindiesSpanisharArabicfrFrenchbnBengaliptPortugueseruRussianjaJapanesedeGermanurUrduviVietnamesetrTurkishkoKoreantaTamilmrMarathiteTelugupaPunjabiyueCantoneseitItalianplPolishukUkrainianroRomaniannlDutchelGreekcsCzechhuHungariansvSwedishsrSerbianbgBulgarianhrCroatianskSlovakdaDanishfiFinnishnoNorwegianltLithuanianslSlovenianlvLatvianetEstonianThe multilingual flag is only valid on certain property types. The schema editor enforces this automatically.
| Property Type | Multilingual? | Output Format |
|---|---|---|
| string | Yes | dict[str, str] |
| number / integer | Yes | dict[str, float] |
| boolean | Yes | dict[str, bool] |
| array of primitives | Yes | dict[str, list[str]] |
| object | No | Mark individual fields inside the object instead |
| array of objects | No | Mark individual fields inside items instead |
| $ref | No | Mark fields inside the referenced entity instead |
Multilingual support is woven into every stage of the enrichment pipeline.
When fusing results from multiple models, multilingual fields are compared per language.
| Scenario | Resolution |
|---|---|
| Models agree on English but differ on French | English passes through; French resolved per-language via majority vote or arbitration |
| One model has Arabic, another doesn't | Prefer the non-null value (Arabic is kept) |
| Multilingual arrays differ in length per model | Union of all items per language |