> For the complete documentation index, see [llms.txt](https://kb.craftformswp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kb.craftformswp.com/documentation/form-building/form-translations.md).

# Translate Form Texts

Show one form in several languages. You translate the texts you typed into the form (labels, help texts, options, messages, the submit button), and visitors see the wording for the language the form is shown in. There are no copies of the form per language, so submissions, prices, formulas and conditions stay in one place. Emails and PDFs can follow the language the visitor used, too.

### What you need

* Everything on this page works in the free version: form translations, Translate on the page, the Glossary, CSV/XLIFF files, emails and PDFs in the submitter's language, and WPML/Polylang support.
* Showing a form in another language to visitors needs one of these: a multilingual plugin (WPML or Polylang), a form embedded on another website (**CraftForms PRO**), or the full-screen link with `?lang=` (**CraftForms PRO**). See [Which language visitors see](#which-language-visitors-see).
* The texts CraftForms itself shows (field error messages like "This field is required", catalog search texts and so on) are translated on **Settings → Field Message Translations**. See [Field Message Translations](/documentation/form-building/general-settings/field-message-translations.md).

### What you can translate

* Field labels, help texts and placeholders
* Required and error messages typed into a field
* Option labels, notes and descriptions (radio buttons, checkboxes, dropdowns, presets)
* The submit button and the success and error messages
* Text in InfoBlocks, headings and paragraphs inside the form
* Step titles, progress labels and the Next/Back texts of a [multi-step form](/documentation/form-building/create-form/multi-step-forms.md)
* The page title and description of the form's full-screen link

Option **values** are never translated, only the labels visitors see. Prices, conditions, formulas, Field Links and stock keep working in every language.

### Translate a form

1. Open your form (**CraftForms → Forms → Edit**).
2. In the sidebar, on the **Form** tab, open **Translations** and click **Translate form texts**.
3. In **Add a language**, pick the language. Every language WordPress knows is listed.
4. Type the wording next to each original text. Leave a text empty to keep the original.
5. Click **Save translations**.

![The Translations window of a form, with German wordings next to the English texts](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2F2EAL5qgUiAQIX8s8oxiU%2Fform-translations--translations-window.jpg?alt=media)

The window shows one language at a time. **Language** switches between the languages you added and shows how many texts are done ("Deutsch — 15 / 42"). Under each original you see where it is used, for example "bouquet · option".

* **Show** filters the list: **All texts**, **Missing**, **Outdated** or **Translated**. **Search** finds a text.
* Keep the parts in double curly braces, such as `{{field.name}}`. If one is missing from your translation, the window warns you.
* **Preview in Deutsch** (or your language) opens the form preview in that language. Save first.
* **Remove unused translations** appears when you deleted texts from the form that still have translations.

**When you change an original text**, its translation becomes **Outdated**. Visitors see the original until you update it. The window shows the old original and its translation, and **Use as a starting point** copies the old translation into the box.

A language you add here is added for the whole site: it shows up on **Settings → Field Message Translations**, in the email Language setting and in the other forms.

### Translate on the page

**Translate on the page** (under **Translate form texts**) shows the form as visitors see it, in the language you pick, and lets you edit every text in place.

1. Click **Translate on the page** and pick the language at the top.
2. Click a text on the form, type the translation and press **Enter** to save it. **Esc** cancels.
3. Texts visitors only see sometimes, such as error messages, placeholders and dropdown options, are listed on the right under **Not on the page**. Each one is saved when you leave its box.

Translated texts have a green outline. Texts not translated yet have an amber, dashed outline. Clicking on the form doesn't submit it or change its answers.

![Translate on the page: the form in German, with untranslated texts outlined and a list of texts not on the page](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FdNxHPlgQdhp5QjZGyDp0%2Fform-translations--translate-on-the-page.jpg?alt=media)

The language must be added first, in **Translate form texts → Add a language**.

### The Glossary: word a text once for every form

Some texts appear in many forms: "Submit", "Email", "Full name". The Glossary lets you word or translate them once, for the whole site.

1. Go to **CraftForms → Settings → Field Message Translations**.
2. In **Your site's language**, open **Glossary — texts in your forms**.
3. Click **Add new** and type the **Original text** exactly as it is in your forms. To change it in your own language too, fill in **Your wording (optional)**, for example every "Submit" becomes "Send".
4. Or click **Find texts in your forms**. CraftForms lists the texts your forms share, most used first, with the number of forms. Tick the ones you want and click **Add … texts**. Tick **Include texts used in only one form** to see the rest.
5. Click **Save Translations**.

![The Glossary with three texts and the list of texts found in the forms](https://97821998-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FM2yV1foUgoGHBC66VBDw%2Fuploads%2FsX2TKGJj8y7rPzbc9Sdi%2Fform-translations--glossary.jpg?alt=media)

To translate the glossary, choose a language under **Other languages**. The same rows are there; type the translation for each one and save.

Good to know about the Glossary:

* A glossary text must match a **whole** text in a form (spaces aside). "Email" matches a label that says "Email", never the word inside "Your email address".
* **The Glossary wins** over a form's own translation. In the form's Translations window, such a text shows "Set site-wide: …" with a link to edit the glossary.
* When you change an original in the Glossary, its translations become outdated. Visitors see the original until you update the translation or click **Keep this translation**.

### Send translations to a translator (CSV and XLIFF)

In the form's Translations window:

* **Export CSV (all languages)** downloads every text with a column per language.
* **Export XLIFF (Deutsch)** downloads one language as an XLIFF file, the format translation tools use.
* **Import CSV or XLIFF…** reads the file back. Texts are matched by their key, or by the original text. Only new or changed translations are saved. Save your open changes before importing.

Email and PDF templates have the same buttons.

### Emails in the submitter's language

Each submission records the language its form was shown in. It's shown in the submission window (see [Form Submissions](/documentation/form-building/form-submissions.md)).

**Send Email** and **Send Email Template** actions have a **Language** setting:

| Option                                                                              | Use it for                                                                            |
| ----------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| **Site language** (default)                                                         | Emails to you or your team. Existing actions keep this, so nothing changes on update. |
| **Submitter's language (the language the form was shown in)**                       | Emails to the visitor.                                                                |
| **Always …** (one entry per language in use, e.g. **Always Deutsch (Deutschland)**) | An email that should always be in one language, for example for an office abroad.     |

The email's language decides the field names, the chosen options and the dates in the email, and, for a template, the template's own texts and subject. Values typed by the visitor are never changed.

You can also use the language in any email, PDF or webhook:

* `{{submission.locale}}`: the language code, for example `de_DE`.
* `{{submission.language}}`: the language's name, in that language, for example `Deutsch (Deutschland)`.

### Translate email and PDF templates

1. Open the template (**CraftForms → Email Templates** or **PDF Templates**).
2. In the sidebar, open **Translations** and click **Translate template texts**.
3. Translate the texts as for a form. For an email template, the subject is in the list too.
4. Click **Save translations**.

The template preview has a **Language** picker. When you preview with a real submission, it starts in that submission's language.

**A different template for a language.** If one language needs its own layout or legal text, click **Use another template for a language** in the same panel, choose the **Language** and the **Template**, and save the template. Emails and PDFs in that language then use the other template instead of a translation. For emails, the recipient still comes from the template chosen on the action.

### PDFs in the submitter's language

* A PDF attached to an email is made in the email's language.
* Documents saved with a submission, catalog order documents and WooCommerce order documents use the submitter's language.
* The **Generate PDF** action has the same **Language** setting as emails, set to **Submitter's language** by default.

The document's language is saved with it. Numbers keep your site's **Number format** setting. Dates and month names follow the language when WordPress has that language installed. For Cyrillic or Greek text, CraftForms uses a font that has those letters.

### WPML and Polylang

When WPML String Translation or Polylang is active, the texts of your forms and templates are registered there each time you save the form or template, in a group called "CraftForms craftforms\_form #123" (the post type and ID). A translation entered there is used too.

Which wording wins, from strongest to weakest:

1. the Glossary,
2. a translation in WPML or Polylang,
3. the form's own translation,
4. the original text.

### Which language visitors see

* **On your site**, the form uses the language of the page. With WPML or Polylang, that's the language the visitor is viewing. Without a multilingual plugin, it's your site language.
* **Embedded on another website** (PRO), the form uses the **Language** picked for the embed, else the language of the page it sits on (its `<html lang>`), else the visitor's browser language, else your site language. See [Embed](/documentation/form-building/embed.md).
* **On the full-screen link** (PRO), add `?lang=de` (or `?lang=de_DE`) to the link.
* **In the form preview**, the Translations window's **Preview in …** button adds `?lang=` for you.

Any text without a translation shows the original.

### Good to know

* Saving translations clears CraftForms' cached forms and asks known page-cache plugins to clear their cache. If your host has its own cache, clear it if an old wording still shows.
* Translations travel with the form when you export and import it.
* A form needs no changes on the page where it's placed: the same block shows every language.
