- Released
- October 21, 2026
- Channel
- Stable
- Tested with WordPress
- 7.1
- Product
- WPML String Translation
Changelog
A theme and plugin scan that can skip other text domains, leaner translation files and faster page loads.
What's new
- The theme and plugin scan can ignore strings from text domains that belong to other themes and plugins.
- The settings explain what each translation preference, Page URL option and scan option does to your content.
- Duplicate string packages can no longer be created.
- Translation files are regenerated when a language's locale changes.
- Security hardening: stored values are escaped, stored data is read more strictly, request input is validated and translation file names are safe.
Performance
- The site's languages are read once per request instead of once per plugin translation file, and no translation file loads twice.
- Front-end pages viewed by an administrator no longer look up every plugin's folder for each translation file, which took seconds on some hosts.
- Saving a post reads each of its string packages only once.
- Translated URL rules are built once instead of on every read, which speeds up WooCommerce pages.
- Translated URL rules are no longer rebuilt twice on every page when a theme or plugin registers post types late.
- Looking up categories and tags by slug no longer repeats the same work on every call.
Fixes in theme and plugin scanning
- The theme scan works for themes whose stylesheet sits in a subdirectory.
- Must-use plugins listed on Theme and plugins localization can be scanned for strings again.
- Theme and plugins localization lists must-use plugins as active with their text domain, and scanning a loader file also scans the folder it loads.
- Must-use code in a folder below mu-plugins can be scanned.
- With a child theme active, the parent theme is listed as active on Theme and plugins localization.
- Viewing the source of a string from a must-use plugin's folder shows its file and line.
- The 'No TextDomain' label of a theme or plugin without a text domain is no longer a link to an empty list.
- The theme scan logs each file the theme loads from outside its folder, which the scan skips, and says how to register those strings.
Fixes in translation files
- Generated translation files carry only the strings the site changed, so WordPress core plurals are no longer overridden.
- A parent theme's translation files are registered while a child theme is active.
- Translation files are imported on sites whose content folder is not directly under the WordPress folder.
- Translation files of a theme in an additional theme folder are recorded as the theme's, not as WordPress core files.
- A customization that only changes letter case, an accent or spacing regenerates the translation file.
- After translation files are rebuilt, a text domain whose customized translations all need updating gets its file back.
- Changing the language of strings regenerates the translation files of both languages, so each language's pages show the right text.
- Plugins that load translations before WPML sets the language, such as must-use plugins, get the page's language instead of the default.
Fixes in plural forms
- Every plural form of imported and customized strings is kept, and the form follows the language's plural rule.
- Plural strings use the language's plural rule everywhere in String Translation, and "0 items" no longer shows as "0 item" while translations load.
- Languages with three or more plural forms, such as Polish, get the right form for every number.
- Plural strings for zero or negative numbers use the plural form while translations load, as WordPress does.
- Text domains whose names differ only in letter case share one translation file and one plural rule.
Fixes in admin texts
- Showing the translated site title and tagline no longer costs database queries on every page.
- Admin texts stored as JSON are translated value by value instead of as one long string.
- No fatal error when a theme or plugin reads a translated admin text before WPML knows the language.
- Updating from 5.1.0 keeps a translated option's text in its own language and the file that serves it.
- Registering the first admin text on a site no longer writes an empty entry that runs extra code on every request.
- The translation files prompt also shows on Admin Texts Translation, and old Theme and plugins localization links open the theme and plugin scan.
- The translation files prompt links to the Admin Texts Translation page instead of a menu entry that no longer exists.
Fixes in Translate Everything
- Turning Translate Everything off while strings are translating no longer leaves them "Translation in progress" for good.
- Translate Everything no longer re-sends a job you cancelled during the first site-wide pass, so it is not charged twice.
- Translate Everything no longer sends and charges a taxonomy label twice when its status record is lost.
- A discarded failed automatic translation job stays discarded, and the strings pass no longer slows down on sites with many past batches.
- Admin texts registered for translation are sent by Translate Everything automatically, like every other string.
- Translate Everything's record of completed languages no longer grows with repeated entries, and stays accurate when a language is removed.
- Translate Everything no longer loses its progress record when two requests save its settings at the same time.
- Taxonomy labels that Translate Everything sends have their own row in the estimate.
- The setup wizard's estimate includes the category and tag fields each post's job carries.
- The setup wizard's estimate includes the taxonomy label strings sent right after setup.
- The setup wizard's estimate includes the string packages that the first pass sends on page-builder sites.
- The estimate row for block widgets is titled Widget and Widgets instead of Block.
Other fixes
- Translating or duplicating a post into several languages at once no longer saves a link to a custom post type with a translated slug in the wrong language.
- After you click Update Now, the "WPML needs to update the database" notice no longer returns on every admin page.
- The Elementor editor and other admin screens stay in your profile language instead of mixing in the page's language.
- A string registration batch interrupted by a server limit is set aside, and background registration stops while automatic string registration is off.
- Two admin requests at the same time no longer register the same string package twice.
- String package tables are created on sites set up through WP-CLI or REST, so saving posts logs no errors.
- Changing a string's language no longer leaves a translation in that same language behind.
- The String Translation screen no longer shows "No strings found" after you delete one domain's strings while others remain.
- The Translation Dashboard section for block widgets is titled Widgets again, not Block.
- Custom post type and taxonomy addresses with a translated slug, such as the Avada Portfolio, no longer return 404 errors.
- Translated WooCommerce Brands links and language switcher links no longer lead to 404 errors.
- WPML creates all its tables with one character set and collation.
- String Translation re-checks the strings table index until it is in place instead of remembering a failed check.
- WooCommerce Memberships "Ended" emails reach customers in their own language when sent in the background.
- The Translation Priority setting is removed.
Read the release announcement for WPML 5.2 for the full story behind this version.
Update or download
The update is available to all WPML clients with an active subscription — it appears on the Plugins page in your WordPress admin within 24 hours of release. You can also check for it right away under Plugins → Add New Plugin → Commercial. To download and install manually, go to Downloads in your wpml.org account (see the installation instructions) and remember to update all components together without mixing versions.
Need help or want to give feedback? Please use our technical support forum.