t('key') in code, while its value lives in the database so editors can reword it in Studio without a code change. That same mechanism powers multi-locale sites.
The rule
Every user-facing static string goes throught('key'). A raw literal in JSX (<h1>Welcome</h1>) skips the entire i18n and inline-editing pipeline and becomes invisible to the editor. Code declares the key; the database holds the visible value.
The first argument to
t() must be a string literal — dynamic keys break source tracking and fail the linter. For HTML attributes (placeholder, alt), cast with String(t(...)). The t() helper, useLabels(), and key-naming rules are part of the project fimo skill — load it before writing code.Label commands
t('key') calls → fimo validate → add missing values with fimo labels set → editors can now change copy in Studio. There is no fimo translations command; use fimo labels.
Configure locales
Locales live infimo-config.json. Keep a single locale unless the user asks for multiple languages:
localesmust includedefaultLocale.path-prefixis the supported routing strategy — e.g./es/aboutfor Spanish, while the default locale can stay at/aboutwhenprefixDefaultLocaleisfalse.- When multiple locales are configured, set label values (and localized entries) for every one.
fimo validate checks for malformed locale tags, a defaultLocale missing from locales, unsupported strategies, canonical routes that claim reserved locale prefixes, and missing default-locale labels.
Routes stay canonical
Keepfimo-config.json#routes unlocalized (e.g. /pricing, not /es/pricing) — the route selector localizes them for the active locale. In React Router projects, use the fimoRoutes() helper and <FimoLink> for locale-aware links.
What’s next
Content & CMS
Localize entries alongside labels.
Framework support
fimoRoutes(), FimoLink, and adapters.Deploy & publish
Ship your localized site.