Concepts
Translation groups
How Brandfine ties locale variants of the same article together.
Every post has a translationGroupId. Posts in the same group
are translations of one another. The cms uses this to:
- Auto-link translations on MDX import (matching by
canonicalSlug). - Surface "translations available" UI in the CMS.
- Build hreflang alternates in the external API responses.
Two ways to identify a post
slug— per-locale URL slug. Unique within(workspace, locale). Used in the consumer URL:/services/visto-schengen(PT) vs/services/schengen-visa(EN).canonicalSlug— stable cross-locale identifier. Shared by every translation of the same article. Drives the auto-linking on MDX import.
In the SDK
Navigation POST items return the full sibling array:
nav.items[0].post.locales
// [
// { locale: 'en', slug: 'schengen-visa', title: 'Schengen Visa' },
// { locale: 'pt', slug: 'visto-schengen', title: 'Visto Schengen' },
// ]The SDK's resolveNavigation helper picks the right sibling
for the active locale and falls back to the default locale's
slug when a translation is missing.