Translating Custom Elementor Widgets
On this page
Available in PRO (version 2.4.0 and later).
When AI translates an Elementor page, it does not send the whole page layout to the translation
engine. It sends only the texts it knows are texts: a heading’s title, a button’s label, a tab’s
content. For that it keeps a list of widgets and of the settings in each widget that hold text.
The list covers the widgets of Elementor, Elementor Pro and PowerPack for Elementor.
A widget that is not on the list is skipped. That is the case for widgets your theme brings
with it, and for widgets from add-on packs the plugin does not know. The rest of the page is
translated, but the texts inside those widgets stay in the original language. No error is shown,
because nothing failed: the plugin simply did not know those settings were text.
The Elementor Widgets screen lets you close that gap yourself, without code: scan the site,
see which widgets are not translated, and tick the settings that hold text.
This page is about widgets an add-on built from scratch for Elementor. A widget whose type
starts with wp-widget- is a different thing – it is your theme’s own WordPress widget
(Search, Categories, Recent Posts, Tag Cloud, or a theme’s own widget class), only wrapped so it
can be dragged onto an Elementor page. Its text is not stored in Elementor’s settings at all – see
Translating Widgets for how that text is handled instead. That is also why a wp-widget-* entry
almost always lands under No text found on this screen: there is nothing in _elementor_data
for it to find.
#When you need this
- A section of an otherwise translated page is still in the original language, and that section
is a widget from your theme or from an add-on. - You installed a new Elementor add-on and want its widgets translated too.
If a whole Elementor page is not translated, this screen is not the cause – check the page in the
LATW Translations box first.
#Scanning the site
Go to LATW Multilingual → Elementor Widgets and click Scan site. The plugin reads every
Elementor page, post and template (including headers, footers and popups built with the Theme
Builder) and lists each widget it does not know. The scan reads your content only; it does not
change anything and does not contact the translation engine, so it costs nothing.
The results are grouped:
- Not translated yet – widgets that hold text and are skipped today. This is where you work.
- Translated with your settings – widgets you already set up.
- Configured in code – widgets your theme or a plugin already set up for translation. Nothing
to do here. - No text found – widgets with no text stored in your pages (images, spacers, icons…).
Run the scan again after you add new widgets to your pages or install a new add-on.
Each group, and each widget card, can be folded by clicking its heading; Expand all and
Collapse all fold or unfold everything at once. Widgets you already set up start folded. The
screen remembers what you folded, in this browser.
#Working on one page
To see only the widgets used on a particular page, pick it in Show widgets on. The list holds
every page, post and template the scan found a listed widget on, with the number of widgets on
each. Groups with nothing on that page are hidden, and each group’s count shows how many of its
widgets are on the page. Choose All pages to see everything again.
#Choosing what to translate
Each widget is shown as a card: its name, how many times it is used, links to a few pages that use
it, and a table of its settings with an example value taken from your pages.
- Text fields are ticked for you when the widget is active on your site – the plugin can see
which settings the widget declares as text (single-line text, multi-line text, rich text). - Settings that are not text are greyed out and cannot be ticked: selects, switches, colors,
icons, numbers. A setting that picks a contact form, a menu or a template is one of these – it
stores an ID, and translating it would break the link to the form. - Link fields are offered but not ticked. Tick one only when the link should lead to a
different address in each language. Links to pages on your own site are usually handled already
by the Internal links in content setting. - Settings of an inactive widget. If the add-on that provides the widget is switched off, the
plugin cannot see its settings. It then lists only the values stored in your pages that look like
text, and ticks none of them.
Always look at the example values before you save. A text field can still hold something that must
not be translated – an HTML ID, a CSS class, a shortcode. Leave those unticked.
Click Save. From then on, every AI translation of a page that uses this widget includes the
ticked settings. To stop, click Stop translating on the card. Translations that already exist
stay as they are.
#Updating pages that are already translated
Saving a widget’s settings does not change your pages, so pages you translated earlier still count
as up to date and will not be translated again on their own.
To bring them up to date, translate them again the usual way – from the Posts screen or the
LATW Translations box of each page. The widget’s card lists how many pages use it, and picking a
page in Show widgets on shows which widgets it holds, so you can see which pages are affected.
Translating a page again sends the whole page to the translation engine, not just the widget,
and is billed like any other translation.
If you change a widget’s settings while one of its pages is being translated, that translation
fails with the message that the Elementor content or widget settings changed. Nothing is written
to the page. Translate it again.
#What this does not do
- Texts left at the widget’s default. Elementor stores a setting in the page only when you
change it. A button label you never touched is not in the page at all – the widget prints its
built-in text, which comes from the theme or add-on. Translate those under
LATW Multilingual → Themes & Plugins. - Content outside the widget. A widget that shows a contact form, a menu or a post only points
to it. The form, menu or post is translated on its own – for Contact Form 7 see
Translating Contact Form 7 Forms. - Lists inside lists. Repeater items (a list of tabs, slides, features) are supported. A list
nested inside a repeater item is not. - Elementor 4 (Atomic) widgets from other add-ons. They store text in a different format and
are not offered on this screen. - Built-in widgets. Elementor, Elementor Pro and PowerPack widgets are already covered and
cannot be changed here.
#Developer reference
The screen stores its choices in the latwmp_elementor_widgets option. A theme or plugin can
declare its widgets in code instead, through the latwmp_elementor_widgets_to_translate filter –
for example from a child theme’s functions.php:
add_filter( 'latwmp_elementor_widgets_to_translate', function ( $widgets ) {
$widgets['tj-form'] = array(
'match' => array( 'widgetType' => 'tj-form' ),
// Each entry is a path under the widget's settings.
'fields' => array(
array( 'tj_title' ),
array( 'tj_subtitle' ),
array( 'button_link', 'url' ), // $settings['button_link']['url']
),
// Repeaters: one group per repeater control ('items' => one group is also accepted).
'items_groups' => array(
array(
'items_field' => 'features',
'fields' => array( array( 'feature_text' ) ),
),
),
);
return $widgets;
} );
- The filter receives the built-in list merged with the choices from the Elementor Widgets
screen, so code has the last word. - A widget declared in code is shown under Configured in code and cannot be edited on the
screen. - Only list settings that hold text a visitor reads. Never list a setting that stores an ID,
because the translation would replace it. - Settings driven by an Elementor dynamic tag are handled automatically: only the tag’s
before, after and fallback texts are translated.