Getting Started with Localization Engine

Configure languages, add glossary terms, mark fields as localized, enable auto-translate — AI handles the rest. Translation Memory caches every result. 100+ languages.

1

Configure Languages

Admin → Localization → Settings:

json { "activeLocales": ["en", "es", "fr", "de"], "defaultLocale": "en" }

Supported locales:

🇺🇸 English (en) — default 🇪🇸 Spanish (es) — Spain 🇪🇸 Spanish (es-MX) — Mexico 🇫🇷 French (fr) — France 🇩🇪 German (de) — Germany 🇵🇹 Portuguese (pt-BR) — Brazil 🇮🇹 Italian (it) — Italy 🇳🇱 Dutch (nl) — Netherlands 🇵🇱 Polish (pl) — Poland 🇷🇺 Russian (ru) — Russia 🇨🇳 Chinese Simplified (zh-CN) 🇯🇵 Japanese (ja) — Japan 🇰🇷 Korean (ko) — Korea ... (100+ total)

How locales work in the data model:

``` When you mark a field as "localized" in a collection schema: → The field stores: { en: "...", es: "...", fr: "..." }

In Admin UI: → Field shows language tabs: [EN] [ES] [FR] [DE] → Translate each language separately → English is the source (defaultLocale)

In public API: → ?locale=es → returns Spanish content → ?locale=fr → returns French content → No locale param → returns defaultLocale ```

2

Add Glossary Terms

Admin → Localization → Glossary → Add Term:

do_not_translate — Brand names, trademarks:

Term: Aeion OS Rule Type: do_not_translate Match Case: ✅ → AI will never translate "Aeion OS" in any language → Stays exactly "Aeion OS" in Spanish, French, German, etc.

always_translate_as — Locale-specific brand phrases:

Term: SaaS Platform Rule Type: always_translate_as Target Translations: { "es": "Plataforma SaaS", "de": "SaaS-Plattform", "fr": "Plateforme SaaS" } Match Case: ✅ → Spanish: "Plataforma SaaS" (not "Plataforma SaaS" from generic translation) → German: "SaaS-Plattform" (German compound noun form) → French: "Plateforme SaaS" (French word order)

guidance — Context-sensitive instructions:

Term: enterprise Rule Type: guidance Description: "Use 'Großunternehmen' for companies with 500+ employees. Use 'Unternehmen' for smaller businesses. Use 'Enterprise' only when referring to our Enterprise tier product." Match Case: ❌ → AI reads this instruction before translating → Translates contextually based on description

Adding many terms at once: The admin UI above adds one term at a time. For a large glossary, script individual create calls against POST /api/v1/loc_glossary from your source list (spreadsheet export, terminology database, etc.) — there's no dedicated bulk-import wizard today, so plan on a short script rather than a point-and-click upload.

3

Mark Fields as Localized

In your collection schema, set localized: true on any field:

typescript // In the content module's pages collection: export const Pages: CollectionConfig = { slug: "pages", fields: [ { name: "title", type: "text", localized: true, // ← This field will be auto-translated required: true, }, { name: "description", type: "textarea", localized: true, // ← Auto-translated }, { name: "slug", type: "text", // No localized: true → not translated (URL slugs stay in default locale) }, { name: "featuredImage", type: "image", // No localized → images are not translated }, ], };

In Admin UI — what you see:

``` Admin → Pages → Edit "About Us"

Title: [EN🇺🇸] "About Our Company" [ES🇪🇸] "Sobre Nuestra Empresa" [FR🇫🇷] "À Propos de Notre Entreprise" [DE🇩🇪] "Über Unser Unternehmen"

Description: [EN🇺🇸] "We are a leading provider of..." [ES🇪🇸] "Somos un proveedor líder de..." [FR🇫🇷] "Nous sommes un fournisseur leader de..." [DE🇩🇪] "Wir sind ein führender Anbieter von..."

Slug: /about-us (not localized — URL is en-only) ```

Auto-translate only fires when:

1. The field is marked localized: true in the collection schema 2. Your active languages are configured in Localization → Settings 3. The target language is missing a translation → If a Spanish translation already exists → skipped (preserves human edits) → If a Spanish translation is marked "rejected" → AI re-translates

4

Save Content — AI Translates Automatically

Everything below happens automatically after setup — you just save the page:

``` You save a page in Admin with: title: { en: "Free Shipping", es: (empty), fr: (empty), de: (empty) }

  1. Aeion detects your active languages (English, Spanish, French, German)
  2. A translation job is queued for each missing language
  3. Workers process the jobs in parallel:
  4. Done in ~30 seconds

In Admin — after auto-translation:

``` Admin → Pages → Edit "Shipping Policy"

Title: [EN🇺🇸] "Free Shipping" [ES🇪🇸] "Envío Gratuito" ← Auto-translated [FR🇫🇷] "Livraison Gratuite" ← Auto-translated [DE🇩🇪] "Kostenloser Versand" ← Auto-translated

Status: Saved with AI translations in background ```

Manual translation (Enterprise):

``` Admin → Localization → Translation Memory

Override auto-translation: → Find entry: "Free Shipping" → "Envío Gratuito" → Edit: "Envío Gratuito" → "Envío Sin Costo" → Status: human_approved → AI will use this translation forever (until you change it)

Reject bad translation: → Find entry: "Free Shipping" → "Envío Gratuito" → Status: rejected → Next page save with "Free Shipping" → AI re-translates from scratch ```

5

Monitor Translation Memory

Translation Memory dashboard:

``` Admin → Localization → Translation Memory

Dashboard metrics: Total entries: 12,847 Total reuses: 48,293 AI cost saved: $96.59

By locale: es: 4,521 entries, 18,234 reuses fr: 3,892 entries, 14,221 reuses de: 3,018 entries, 10,847 reuses

By status: ai_generated: 12,340 human_approved: 507 rejected: 0

Translation effectiveness: Reuse rate: 79% (48,293 reuses / 61,140 total lookups) → 79% of translation requests served from cache = $0 AI cost → Only 21% required new AI calls ```

Per-entry details:

``` Source Text: "Free shipping on orders over $50" Translated: "Envío gratuito en pedidos superiores a 50 $" Locale: es Context: "Translating title for a product page" Status: human_approved Usage Count: 47 ← Incremented on every cache hit Last Used: 2024-01-15T14:32:07Z Created: 2024-01-01T09:00:00Z

Cache hit #47: → Total AI cost avoided: 47 × ~$0.002 = $0.094 → This single entry has saved $0.094 in AI costs alone → Your entire TM: 48,293 reuses × $0.002 avg = $96.59 total saved ```

Translate Everything. Automatically.