i18n Migration

i18n Namespace Migration

In version 2026.3.0, all i18n keys in the admin UI were migrated to canonical namespaces. The legacy single-letter alias system has been removed.

Key mapping

Old PrefixNew PrefixScope
n.*nav.*Navigation labels
e.*enum.*Enumerations and option lists
t.*text.*General UI text
t.educ.*text.educ.*Education-specific text
e.attr.*enum.attr.*Attribute enumerations

Examples

# Navigation
n.a.subject     → nav.a.subject
n.b.apply       → nav.b.apply
n.b.cancel      → nav.b.cancel
n.b.save        → nav.b.save

# Enumerations
e.date          → enum.date
e.status        → enum.status

# General text
t.page_title    → text.page_title
t.confirm       → text.confirm

# Education
t.educ.semester → text.educ.semester

What was removed

The applyLegacyAliases() function that mapped old prefixes to new ones has been deleted. This means:

  • Old keys like n.b.save will not resolve at runtime.
  • All Vue components must use canonical keys directly.
  • Legacy admin locale file loading (LEGACY_ADMIN_LOCALE_FILES) has been removed.

CMS Management namespace

The new CMS Management module uses the text.cmsm.* prefix:

text.cmsm.dashboard_title
text.cmsm.domain_list
text.cmsm.customer_create

How to migrate custom code

  1. Search for old prefixes (n., e., t.) in your Vue files.
  2. Replace with the canonical prefix (nav., enum., text.).
  3. Wrap column definitions and option arrays in computed() to ensure i18n reactivity.
// Before (broken)
const columns = [
    { title: t('n.b.name'), dataIndex: 'name' },
]

// After (correct)
const columns = computed(() => [
    { title: t('nav.b.name'), dataIndex: 'name' },
])

No backwards compatibility

There is no fallback layer. Code using old prefixes will show raw keys instead of translated text. Audit all custom components before upgrading.