Skip to content

WPML

With WPML you never translate generated pages. You translate the template: its design, its address pattern and its rows’ values. RowSprout then generates every page in that language and links it to the same page in the other languages, so WPML’s language switcher and hreflang links work on generated pages too.

  • Templates and pages are translatable. With RowSprout Pro active, WPML treats RowSprout Templates and RowSprout Pages as translatable post types; RowSprout sets this for you.
  • A translation has the same properties and rows. What you translate are the values: the address pattern, and each row’s title, URL slug and other values. The properties themselves, with their types and codes, are the same in every language.
  • Each language generates its own pages, placed in that language and linked as translations of the original’s pages.
  • Each language is updated on its own. Saving the original template regenerates the original’s pages only. A translation’s pages are updated when that translation is completed or saved. This way an edit in one language never overwrites the pages of another before they are translated.
  1. Finish the original first. Add the properties and rows, design the page and generate it in the original language.

  2. Start the translation from WPML → Translation Management. Select the template and send it to translation, then translate it in WPML’s Translation Editor. RowSprout removes WPML’s Languages column (the + icons) from the template and page lists, because a translation started there can miss the address pattern.

  3. Translate the parts. The Translation Editor shows:

    • the design’s texts (block editor, Elementor or WPBakery);
    • the Page URL pattern: the template’s Href, such as /roofer-@code_href_210@ → /couvreur-@code_href_210@;
    • per row, the Title, the URL slug and every other value.
  4. Keep every placeholder token exactly as it is. See Placeholder tokens in a translation below.

  5. Complete the translation. RowSprout queues the pages of that language, and they are generated in the background like any other. When the template’s Save action is Save template only or Schedule page updates, nothing is generated yet: the pages are marked as outdated, or wait for their planned moment.

The generated pages get the language’s address, such as /fr/couvreur-lyon/ with WPML’s language directories, also when the pages live directly at the site root.

A token such as @code_town_210@ tells RowSprout which property to fill in. In a translation, it must arrive unchanged:

  • Don’t translate the code. @code_town_210@ must not become @code_ville_210@: the code is the property’s code, which is the same in every language. A translated code matches no property, and the token stays on the page as literal text.
  • Keep the ID as it is. The number is the ID of the template the text was written in. A translation is a separate template with an ID of its own, but you don’t need to change the number: RowSprout recognises the IDs of the original and of all its translations in every language. Leave @code_town_210@ as @code_town_210@, even in a template with ID 345.
  • Keep the @ signs and underscores. A token with a space added, or with one of its @ signs missing, is no longer recognised.
  • Move tokens freely. A token may sit anywhere in the translated sentence: Your roofer in @code_town_210@ becomes Votre couvreur à @code_town_210@.

This applies everywhere a token can appear: the title, the Href pattern, the content, button links and SEO fields.

The same goes for a child template: a token with the parent’s ID, such as @code_town_210@ in the title Roof repair in @code_town_210@, stays as it is in the child’s translation.

  • URL slug: type the name as it is written (Saint-Étienne). RowSprout turns it into an address part the same way as in the original language (saint-etienne), and letters of other alphabets stay as they are, so a Greek translation gets αθήνα. RowSprout warns when two rows in a language would get the same address. See Languages and special characters.
  • Values that stay the same, such as a phone number, a name or an image, can simply be copied.
  • Keep the rows in the same order in every language. RowSprout links each translated page to its original by the row’s position, so add new rows at the end of the list and don’t reorder rows in a translation.

Translate the parent template first, then its child templates. A child page is placed under its parent page, and a translated child can only be placed under a translated parent: Roof repair in Lyon in French lives under the French Roofer in Lyon page.

  • A new row: add it to the original template, at the end, and generate. WPML marks the translation as needing an update; translate the new row and complete it, and the translated page follows.
  • A changed value or design: change the original and generate, then update the translation in WPML. The translated pages keep their current content until you complete that update.
  • A change in one language only: edit that translation’s value and save it with Create & update pages.
  • A Grid lists the pages in the language of the page it is on. Place the same Grid on the translated Locations page and it lists the translated pages.
  • Sibling Links and Page Link (Pro, Elementor) link to the page in the same language.
  • Don’t translate or edit generated pages by hand. RowSprout removes WPML’s + for generated pages: each translation is generated from the translated template, and the next generation would overwrite manual changes.
  • Clear your page cache after translating. Cached pages can keep showing old hreflang links or language switcher entries until their cache is cleared. See Caching.
  • Planning (Pro) works per language: plan a translation’s rows on its own Planning tab. The WP-CLI and MCP planning commands only change the original language’s template.