Translating Forms Across Craft Sites
You can use the same contact form on English and French sites, with labels and messages in each language. Formie shares the field layout across sites and lets you change the wording for each one. This walkthrough creates the English defaults, adds French translations in the form builder and checks what visitors see.
Prerequisites
- Craft multi-site enabled with at least two sites
- Multi-Site
- Static Translations — built-in interface messages and project strings
Two Separate Concerns
Keep these distinct:
| Concern | Question | Where to configure |
|---|---|---|
| Site availability | Should this form exist on this site? | Form group Site Policy |
| Content translation | What text should visitors see? | Form builder site switcher |
A form can be available on English and French with translated labels. Or available on one regional site only with no translations needed.
Fields, handles, conditions and integrations are shared across sites. Adding a field on the French site adds it to the English site too; changing its French label affects only French.
Step 1 — Scope the Form to the Right Sites
Create or assign a form group with the correct Enabled Sites and Site Propagation before authors build content.
Example — global contact form on EN and FR:
- Group Global Forms with both sites enabled
- Propagation: All enabled sites
- Create the form on the English (source) site
Example — Australia-only form:
- Group Australia Forms with only Australia enabled
- Create the form while viewing the Australia site in the CP
Ungrouped forms are treated as available on all sites you can edit.
Step 2 — Write Default Content on the Source Site
Each form has a source site — where it was created. That site holds default translatable content.
- Switch the CP to the source site (usually your primary English site)
- Open the contact form
- Set title
Contact us, field labelYour name, success message, button labels - Save
Structural work (adding fields, conditions, integrations) updates the shared form regardless of which site you are viewing when you save.
Step 3 — Add French Overrides
- Use the site switcher (globe icon) in the form builder breadcrumb
- Select French
- Change title to
Contactez-nous, field label toVotre nom, and other French copy - Save
These changes apply only to the French site. The English defaults stay unchanged, and any text you leave unchanged on French continues to use them.
Translation icons beside field labels indicate overridable values. On the source site you edit the default; on other sites you edit overrides.
Step 4 — Translate Nested and Option Fields
Name, Address, Group, Repeater — child field labels translate the same way as top-level fields. Override only the children that change.
Dropdown, radio, checkbox — override option labels and values per site when both need to differ. Leave unchanged options inherited from the source site.
Page settings — submit, back, and save button labels on each page are translatable.
Form messages — error, success, limit, and scheduling messages support per-site overrides.
Step 5 — Verify Front-End Rendering
No extra template code is required. When you render for a site, Formie merges overrides automatically:
{{ craft.formie.renderForm('contactForm') }}This applies to:
- Twig rendering
- GraphQL and headless packages (
siteId,localeprops) - React/Vue bootstrap
Open the form on both sites. Confirm that French shows Contactez-nous and Votre nom, while English still shows Contact us and Your name. Submit a test on each site and check the success message. The saved submission’s siteId identifies the site it came from.
Step 6 — What Not to Put in Translation Files
Form builder content does not belong in translations/*/formie.php:
// Don’t translate form builder copy here — use CP site overrides instead
'Your name' => 'Votre nom',
'Contact us' => 'Contactez-nous',Keep formie.php for Formie-owned UI strings only:
// Plugin UI strings
'{label} cannot be blank.' => '…',
'(optional)' => '…',See Static Translations for translating built-in messages and project strings.
Step 7 — Notifications
Notification subject and body can be edited per site in the builder, with overrides stored alongside other translation data.
Many teams prefer instead:
- Separate notifications with conditions per site or language
- Variables in one notification (
{site:name}, and so on)
See Multi-site notification content.
When You Need Different Layouts per Site
Site overrides are for different text on the same form, not different field sets.
For radically different forms:
- Separate forms in groups scoped to the right sites
- Conditions to show/hide fields based on site variables
Troubleshooting
French site shows English labels
Add French site overrides in the builder — not entries in formie.php.
Two English sites need different labels
Use CP site overrides. A single translations/en/formie.php cannot distinguish Craft sites.
Field added on French site appeared on English too
Fields and layout are shared across sites. Wording and whether an existing field is required can differ per site.