Advanced

Multilingual sites: WPML, Polylang and TranslatePress

Published

A shop that sells in more than one language has two sets of everything: two sets of products, two sets of categories and brands, two sets of URLs. Super Speedy Filters is language-aware on all three of the major multilingual plugins, so each language’s archive lists its own terms, with its own counts, linking to its own URLs.

Available since 6.44.

What each multilingual plugin does for you

The three plugins work in genuinely different ways, and that changes what you get.

WPMLPolylangTranslatePress
How translation worksseparate posts and terms per languageseparate posts and terms per languageone set of content, translated at output
Facets show only the current language’s termsyesyesnot applicable, there is one set of terms
Super Speedy Filters’ own wording is translatableWPML String TranslationLanguages then Translationsits own translation editor
Translated URL slugs, e.g. /categorie-produit/includedPolylang ProSEO Pack add-on
hreflang on filtered pagesfrom Super Speedy Filtersfrom Super Speedy Filtersfrom TranslatePress
Titles and meta descriptions on filtered pagesincludedincludedSEO Pack add-on

WooCommerce support needs the companion plugin in each case: WooCommerce Multilingual for WPML, Polylang for WooCommerce for Polylang.

Note

Polylang’s free edition translates the WooCommerce catalogue perfectly well. Tick product under Languages then Settings then Custom post types and Taxonomies, along with product_cat, product_tag, product_brand and your attribute taxonomies, and the whole catalogue becomes translatable. Polylang Pro adds translated URL slugs, not the ability to translate products.

Translating the plugin’s own wording

Two kinds of text belong to Super Speedy Filters rather than to your catalogue: the SEO wording that builds filtered page titles and meta descriptions, and the labels on each filter widget. Both are registered for translation under a single group named Super Speedy Filters.

  • WPML — go to WPML then String Translation and filter by the Super Speedy Filters domain.
  • Polylang — go to Languages then Translations and look for the Super Speedy Filters group.

The SEO strings cover the title prefix and suffix, the connector words that join filters together in a title, the meta description wording, the browser title suffix, the paginated title text and the on-sale prefix.

The widget strings cover every text field on every filter: the group heading, the search box placeholder, the dropdown text, the required-filters tooltip, the clear-filters and clear-search labels, and the stock, on-sale and post-meta toggle labels. They appear under names of the form widget:<widget id>:<number>:<field>, for example widget:ssf_tax_widget:3:searchboxtext.

Strings are registered as the plugin reads them, so load the settings screen or a page carrying the widget once and they appear in the translation list.

Editing a setting sends its translations back for approval

WPML tracks translations against the exact source text. Change the wording of a setting — the title separator, say, or a widget’s group heading — and the source string changes with it, so WPML marks each translation of it needs update and serves the source text on translated pages until a translator approves the change.

This is WPML working as designed, but it surprises people, because the visible symptom is the default language reappearing on translated pages right after an edit that had nothing to do with translation.

Common mistake

Editing SEO wording and then wondering why French pages have gone English. Open String Translation, filter by the Super Speedy Filters domain, and approve the strings marked needs update.

Choosing whether to translate brands and attributes

Each taxonomy is translated or not, and the choice is yours per taxonomy. It has a visible effect on your filters:

  • Translated — French has its own Ikea term with its own French slug, and the Brands filter on a French archive lists only the French terms. Brand names that read the same in every language still need a translation to exist, or the brand is missing from that language’s filter entirely.
  • Not translated — one Ikea term serves every language. The Brands filter lists the same terms everywhere, in the language they were entered in, and the filter never goes empty.

Brands are the usual case for leaving a taxonomy untranslated, because a brand name is a proper noun that rarely changes between languages. Categories are the usual case for translating, because Chairs really should read Chaises.

Super Speedy Filters follows the setting either way. It restricts a filter to the current language only for taxonomies your multilingual plugin is translating; an untranslated taxonomy is left alone, because filtering shared terms by language would leave the filter with nothing to show.

Colours and thumbnails

Swatch colours and term thumbnails are read from the term you set them on, falling back to the default language’s term when a translated term has none. Set a palette once in your default language and every language uses it. Set a colour or thumbnail on a translated term and that one wins for its language.

Filtered URLs and search engines

Filtered pages you allow to be indexed carry hreflang tags listing the equivalent filtered URL in each language, along with a self-reference and x-default — the French filtered page points at the English one, and the other way round.

A language is listed only when every term in the filter has a translation in it. A page filtered by a term that exists in one language alone lists only that language, which is correct: there is no equivalent page to point at.

Polylang Pro’s translated slugs are understood, so a French page at /fr/categorie-produit/chaises/ builds its title, breadcrumbs and filter links from the French terms, and its filter links stay inside the French URL space.

TranslatePress writes its own correct hreflang tags on filtered pages, so Super Speedy Filters leaves them alone.

TranslatePress and page titles

TranslatePress translates a page’s visible content. Titles and meta descriptions live in the document head rather than the body, and translating them is the job of TranslatePress SEO Pack. Without SEO Pack, a filtered page on a translated URL keeps its source-language title and meta description while its content translates normally.

Everything else works without SEO Pack: filters parse the language prefix in the URL, the right products are listed, and per-URL SEO overrides match translated URLs.

Troubleshooting

A brand facet leads to a 404 on WPML

With WooCommerce Multilingual, product_brand‘s URL base is translated in the links WordPress generates without a matching rewrite rule being registered for it, so a URL such as /marque/ikea-fr/ returns a 404 while /brand/ikea-fr/ resolves.

This is not something the filters do. To confirm it on your own site, deactivate Super Speedy Filters and open a brand archive from the WooCommerce brand list: the same URL is generated and the same 404 comes back. Categories are unaffected. Raise it with WPML support.

Translated pages show the default language’s wording

Almost always a WPML string awaiting approval — see Editing a setting sends its translations back for approval above.

A filter is empty in one language

The terms in that language have no products assigned, or the taxonomy is translated and the terms have not been translated yet. A filter lists a term only when that language’s term has products, which is what stops a facet leading to an empty page.

Further reading

which filtered pages are indexable, and what canonical each one declares
per-URL titles and descriptions, and how one Contains rule covers every language
the filtered URL structure the language prefix sits in front of
setting swatch colours on terms

Comments

▲
▼
1/1