LangRelay

Changelog

1.9.23

  • Fix: the built-in Logs tab now shows log entries. Requests to the logs endpoint were missing the required authentication header, so the tab always showed “No log entries found.”

1.9.22

  • Fix: the plugin connection could silently drop on sites that had connected before refresh tokens were available. The plugin now detects this correctly and shows the reconnect prompt.

1.9.21

  • Fix: clicking “Sync” after the LangRelay connection expired would show a generic error with no way to recover. It now shows a clear message with a reconnect link.

1.9.20

  • Fix: newly published pages are now correctly translated on first visit.

1.9.19

  • Fix: newly published pages are now correctly translated on first visit.

1.9.18

  • Improvement: pages that have not been translated yet are automatically prepared for translation in the background when first visited. Future visitors see a fully translated page without any delay.

1.9.17

  • Fix: WordPress admin links no longer show a language prefix in the URL.
  • Fix: dynamic content (modals, AJAX panels) no longer re-translates text that is already in the target language.
  • Fix: very short sentence fragments are no longer sent for translation, reducing unnecessary API calls.

1.9.16

  • Fix: links in the WooCommerce mini-cart drawer (View cart, Checkout) now point to the correct language URL. These links are loaded via AJAX, so the plugin’s server-side link rewriting couldn’t reach them — they’re now rewritten in the browser automatically.

1.9.15

  • Fix: WooCommerce checkout fields (Billing address, Contact information, First name, etc.) now translate on page load. The translation engine now scans content that was already rendered by React before it started — previously these labels were invisible to LangRelay because they appeared before the observer attached.

1.9.14

  • Fix: dynamic translations on language-prefixed URLs (e.g. /de/checkout) now correctly associate with the source-language page, so coverage tracking in the dashboard is accurate.
  • Improvement: screen-reader-only text (invisible to sighted visitors) is no longer sent for translation, reducing unnecessary API calls on WooCommerce checkout pages.
  • Improvement: price strings like “CHF 25,00” and “€25.00” are no longer sent for translation.

1.9.13

  • Improvement: dynamically translated content (modals, React blocks, WooCommerce checkout) now counts toward the correct page’s translation coverage in the dashboard.
  • Performance: dynamic translations appear faster — the browser no longer waits for background processing to complete before showing translated text.

1.9.12

  • Fix: WooCommerce Blocks checkout section headings and field labels (Contact information, Billing address, First name, etc.) now render in the target language. React was re-rendering these from wp.i18n.__() after PHP translation — an inline script now pre-loads translations into the wp.i18n registry before the deferred WC Blocks scripts execute.
  • Fix: auto-redirect now skips when the X-LangRelay-Crawler request header is present, so the LangRelay crawler always receives the source-language page instead of being redirected to a language-prefixed URL. Also adds langrelay to the bot user-agent bypass list as a fallback.

1.9.11

  • Fix: auto-redirect no longer fires on /wp-admin, /wp-login.php, or /wp-json paths. With force-fallback enabled, logged-out users were being redirected from /wp-admin to /<lang>/404/.

1.9.10

  • Fix: visitor routing settings (auto_redirect, auto_redirect_fallback, auto_redirect_force_fallback) synced from the LangRelay dashboard now persist correctly. They were being stripped by the settings sanitizer, so auto-redirect never engaged on synced sites even when enabled in the dashboard.
  • Add X-LangRelay-Handle and X-LangRelay-AutoRedirect response headers, the auto-redirect state in /wp-json/langrelay/v1/debug/status, and a log entry on every “Sync project” attempt — so support can diagnose redirect issues without touching the server.

1.9.6

  • Add “Always redirect to fallback” toggle – overrides browser language matching, sends every non-bot visitor to the chosen fallback language. Useful when the WordPress site language is set to one language but the customer wants traffic served from a different language URL prefix by default.
  • Sync auto_redirect, auto_redirect_fallback, and auto_redirect_force_fallback from the LangRelay API so dashboard changes propagate to the plugin.
  • Refactor LangRelay_Auto_Redirect::maybe_redirect to use a pure resolve() method for testability.

1.9.5

  • Fix: language switcher chevron now sits inline next to the flag/language name. The 1.9.4 button reset (display: contents) inadvertently broke the default row layout of the customizable select; explicitly making the select an inline-flex row restores it.

1.9.4

  • Fix: language switcher’s inner trigger button now correctly resets against page-builder themes. With appearance: base-select, the browser renders a <button> inside the <select> that themes like Elementor were re-styling (red background, uppercase text). The 1.9.3 fix scoped the <select> styles but missed this inner button. Now explicitly resets it with all: unset; display: contents at higher specificity.

1.9.3

  • Fix: language switcher styles now beat aggressive page-builder themes (Elementor, Divi, etc.) by scoping selectors under .langrelay-switcher for higher specificity. Also explicitly resets text-transform, letter-spacing, font-weight, and text-align so themes that style bare button elements no longer leak through.

1.9.2

  • Security: escape hreflang and canonical output with wp_kses().
  • Security: use wp_add_inline_script() for translation preloading instead of raw script injection.
  • Security: eliminate unescaped full-page echo by using ob_start() callback.
  • Improvement: rename all transient prefixes from lr_ to langrelay_ for consistency.
  • Fix: stale mock prefix in cache purge test after transient rename.

1.9.1

  • Security: use wp_safe_redirect() for auto language redirects.
  • Security: remove token preview from debug REST endpoint.
  • Security: remove unused debug token authentication methods.
  • Improvement: bundle country flag SVGs locally instead of loading from external CDN.

1.9.0

  • WordPress.org plugin review compliance: removed “WordPress” trademark from display name, fixed Plugin URI, properly sanitize all settings fields in register_setting callback, and explicitly close output buffer via shutdown hook.
  • New: setup wizard now lets you select an existing organization and project instead of requiring a new one.
  • Removed debug panel from setup wizard.

1.8.1

  • Fix: languages added in the LangRelay dashboard now auto-sync to WordPress via a project.updated webhook event.
  • New: manual “Sync” button in the Project Status card to pull the latest project settings (languages, source language) from the dashboard on demand.
  • Improvement: existing installs automatically reconcile their webhook subscription on the next admin page load to include the new project.updated event.

1.8.0

  • Dynamic content translation: modals, AJAX panels, and client-rendered content (React, Vue, Svelte) now translate without flickering or invisible text.
  • Performance: client-side translations are cached in localStorage with automatic version-based invalidation when you edit translations in the dashboard.
  • Performance: first batch of dynamic text translates immediately (no 300ms debounce delay on initial render).
  • New: server-side translation map is pre-loaded into the client SDK, so shared strings translate instantly from cache.
  • New: debug logging via ?langrelay_debug=1 query param or data-debug=”true” on the script tag for troubleshooting.

1.7.1

  • Fix: script blocks containing HTML string literals (e.g. WooCommerce gallery scripts building <a> and <img> tags in JavaScript) are no longer corrupted by the URL rewriter. DOMDocument now skips script and style blocks during URL rewriting.
  • Fix: translation matching is now case-insensitive. Menu items and other text styled with CSS text-transform (e.g. “wallcoverings” in HTML displayed as “Wallcoverings” via CSS) now match translations regardless of casing.

1.7.0

  • Email translation: outgoing WordPress emails (wp_mail) can now be translated to the recipient’s language. Enable under Settings > LangRelay.
  • WooCommerce email integration: order confirmations and other WooCommerce emails are automatically translated when email translation is enabled.
  • Batch translation API: new translate_batch() method for translating plain text strings without HTML overhead.
  • URL slug routing fix: translated URL slugs are now reverse-translated before WordPress routing, fixing 404s on translated permalink slugs.
  • Bundled client JavaScript locally instead of loading from an external server.
  • Various wp.org Plugin Check compliance fixes.

1.6.0

  • Language switcher block, Elementor widget, and shortcode now support display override attributes (show flags, show names, use native names)
  • Added [langrelay_switcher] shortcode for placing the switcher in classic themes and page builders
  • Cleaned up admin settings: removed unused switcher fields, added dashboard link and status indicator
  • Auto-inject toggle now properly controls whether the switcher script loads
  • Org slug persisted during OAuth for dashboard deep links

1.5.1

  • Added Settings link to plugin action row on the Plugins page.
  • Redirect to settings page on first activation for easier onboarding.

1.4.7

  • Updated admin UI to match LangRelay brand design.
  • Added SVG logo to plugin settings header.
  • Lowered PHP requirement to 8.0 with polyfills.
  • Added 15 new translation locales (27 total).
  • Language pills with flags on settings overview.

1.0.0

  • Initial release.
  • AI-powered page translation via LangRelay API.
  • Language switcher (dropdown, list, flags) as Gutenberg block, Elementor widget, shortcode, or auto-injected.
  • SEO support with hreflang tags and translated meta.
  • WooCommerce, Yoast SEO, Rank Math, WP Rocket, and Cache Enabler compatibility.
  • WordPress transient caching for translated pages.

Plugin Website
Visit website

Author
langrelay
Version:
1.9.23
Last Updated
May 29, 2026
Requires
WordPress 6.0
Tested Up To
WordPress 6.9.4
Requires PHP
8.0

Share Post

Join our newsletter.

Get insights into what’s happening at ChangelogWP right in your inbox. We don’t believe in spam.