{"id":351929,"date":"2026-09-29T06:01:28","date_gmt":"2026-09-29T06:01:28","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/openlingua\/"},"modified":"2026-09-29T05:59:15","modified_gmt":"2026-09-29T05:59:15","slug":"sysopenlang","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/sysopenlang\/","author":16679961,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.20.36","stable_tag":"1.20.36","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"SysOpenLang","header_author":"SysOpenLang Contributors","header_description":"Multilingual content, custom post types, custom fields and strings for WordPress.","assets_banners_color":"","last_updated":"2026-09-29 05:59:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/sysopenlang\/","header_author_uri":"https:\/\/profiles.wordpress.org\/juanu96\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":32,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.20.36":{"tag":"1.20.36","author":"juanu96","date":"2026-09-29 05:59:15","revision":3718336}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3718374,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3718374,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.20.36"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[1487,8583,1734,99,2333],"plugin_category":[48],"plugin_contributors":[283340],"plugin_business_model":[],"class_list":["post-351929","plugin","type-plugin","status-publish","hentry","plugin_tags-custom-post-types","plugin_tags-languages","plugin_tags-localization","plugin_tags-multilingual","plugin_tags-translation","plugin_category-language-tools","plugin_contributors-juanu96","plugin_committers-juanu96"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/sysopenlang\/assets\/icon-128x128.png?rev=3718374","icon_2x":"https:\/\/ps.w.org\/sysopenlang\/assets\/icon-256x256.png?rev=3718374","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>SysOpenLang is free software for managing translated WordPress content from one installation. Core translation features work without an external account.<\/p>\n\n<p>Stable supported features:<\/p>\n\n<ul>\n<li>Languages, locales, pretty <code>\/en\/<\/code> URLs, query fallback, language switcher, and translated redirects.<\/li>\n<li>A catalog of more than 60 languages plus custom languages, native names, locales, flags or symbols, and RTL direction.<\/li>\n<li>Directory, query-parameter, or per-language domain URL modes.<\/li>\n<li>Configurable public visibility, administration locale, browser redirect, footer switcher, and missing-translation behavior.<\/li>\n<li>Pages, posts, public custom post types, categories, tags, and custom taxonomies.<\/li>\n<li>A unified Media Library without translated attachment copies, plus an optional media-per-language mode for editors and visual builders.<\/li>\n<li>One-click translation drafts with translated hierarchy and taxonomy mapping.<\/li>\n<li>Block-level Gutenberg translation for native, nested, reusable, dynamic, and third-party block content.<\/li>\n<li>Elementor text extraction through a public builder-extractor API.<\/li>\n<li>Safe automatic discovery of structured visual-builder metadata with stable element identities and a read-only field inspector.<\/li>\n<li>Translation workflow statuses and outdated-source detection.<\/li>\n<li>Per-language menu assignment for registered theme locations.<\/li>\n<li>Language-aware public archives, searches, canonical URLs, <code>hreflang<\/code>, <code>x-default<\/code>, and sitemap entries.<\/li>\n<li>String registration, plural helper, editing, and optional gettext discovery.<\/li>\n<li>Pluggable machine-translation providers and a consent-based background job queue.<\/li>\n<li>WooCommerce product, variation, attribute-term, inventory, download, dimension, and related-product synchronization without duplicating SKUs.<\/li>\n<li>Portable JSON import with validation, conflict preview, automatic backup, and rollback, plus REST endpoints, WP-CLI commands, diagnostics, object caching, privacy text, and multisite-safe per-site tables.<\/li>\n<li>A first-run assistant plus centralized controls for translation creation, review, automatic jobs, permissions, notices, SEO, discovery, maintenance, and uninstall behavior.<\/li>\n<li>Data preservation on uninstall unless permanent cleanup is explicitly authorized.<\/li>\n<\/ul>\n\n<p>SysOpenLang does not send content to a translation service unless an administrator configures a provider and explicitly starts an automatic translation job. See External services below before enabling a provider.<\/p>\n\n<h3>Developer API<\/h3>\n\n<pre><code>SysOpenLang\\register_string( 'footer_title', 'Contact us', 'theme' );\n\nSysOpenLang\\translate_string( 'footer_title', 'Contact us', 'theme' );\n\nSysOpenLang\\translate_plural( 'item', 'items', $count, 'Item', 'Items', 'theme' );\n\nSysOpenLang\\translated_post_id( get_the_ID(), 'es' );\n\nSysOpenLang\\translated_term_id( $term_id, 'es' );\n\nSysOpenLang\\set_menu_translation( 'primary', 'es', $menu_id );\n<\/code><\/pre>\n\n<p>Provider integrations implement <code>SysOpenLang\\Contracts\\Translation_Provider<\/code> and register through <code>SysOpenLang\\register_provider()<\/code> or the <code>sysopenlang_translation_providers<\/code> filter.<\/p>\n\n<p>Builder integrations implement <code>SysOpenLang\\Contracts\\Content_Extractor<\/code> and register on <code>sysopenlang_register_content_extractors<\/code> with <code>SysOpenLang\\Content_Extractors::register()<\/code>.<\/p>\n\n<p>REST endpoints:<\/p>\n\n<ul>\n<li><code>GET \/wp-json\/sysopenlang\/v1\/languages<\/code><\/li>\n<li><code>GET \/wp-json\/sysopenlang\/v1\/translations\/post\/123<\/code><\/li>\n<li><code>GET \/wp-json\/sysopenlang\/v1\/translations\/term\/45<\/code><\/li>\n<li><code>POST \/wp-json\/sysopenlang\/v1\/jobs<\/code> (authenticated editors)<\/li>\n<li><code>GET \/wp-json\/sysopenlang\/v1\/diagnostics<\/code> (administrators)<\/li>\n<\/ul>\n\n<p>WP-CLI:<\/p>\n\n<ul>\n<li><code>wp sysopenlang languages<\/code><\/li>\n<li><code>wp sysopenlang export &gt; sysopenlang.json<\/code><\/li>\n<li><code>wp sysopenlang import --file=sysopenlang.json<\/code><\/li>\n<li><code>wp sysopenlang diagnostics<\/code><\/li>\n<\/ul>\n\n<h3>Scope and compatibility<\/h3>\n\n<p>ACF and builders are supported through metadata policies. Complex components that store remote data or proprietary serialized structures may require a small adapter using the documented filters.<\/p>\n\n<p>WooCommerce support covers translated product content, stable linked variations, translated global attribute terms, variation descriptions, and synchronized operational product metadata. Order localization, subscriptions, and third-party WooCommerce extensions require dedicated adapters and are not claimed as supported by this release.<\/p>\n\n<h3>External services<\/h3>\n\n<p>SysOpenLang can optionally send content selected for automatic translation to one configured provider. These integrations are disabled until an administrator adds their own API credential, selects that provider, and starts a translation job. SysOpenLang itself does not create provider accounts, collect provider payments, or receive the submitted content.<\/p>\n\n<p>Depending on the selected provider, the plugin sends the source and target language identifiers, the human-readable content segments being translated, and an instruction to preserve structural markup. The configured API credential is sent only to that provider for authentication. Provider model-list requests send the credential but no site content. Review the applicable provider terms and privacy policy before use:<\/p>\n\n<ul>\n<li>OpenAI API: <code>https:\/\/api.openai.com\/v1\/models<\/code> and <code>https:\/\/api.openai.com\/v1\/responses<\/code>. <a href=\"https:\/\/openai.com\/policies\/terms-of-use\/\">Terms<\/a> and <a href=\"https:\/\/openai.com\/policies\/privacy-policy\/\">Privacy<\/a>.<\/li>\n<li>Anthropic API: <code>https:\/\/api.anthropic.com\/v1\/models<\/code> and <code>https:\/\/api.anthropic.com\/v1\/messages<\/code>. <a href=\"https:\/\/www.anthropic.com\/legal\/commercial-terms\">Terms<\/a> and <a href=\"https:\/\/www.anthropic.com\/legal\/privacy\">Privacy<\/a>.<\/li>\n<li>Google Gemini API: <code>https:\/\/generativelanguage.googleapis.com\/v1beta\/models<\/code> and its <code>generateContent<\/code> endpoint. <a href=\"https:\/\/ai.google.dev\/gemini-api\/terms\">Terms<\/a> and <a href=\"https:\/\/policies.google.com\/privacy\">Privacy<\/a>.<\/li>\n<li>Google Cloud Translation API: <code>https:\/\/translation.googleapis.com\/language\/translate\/v2<\/code>. <a href=\"https:\/\/cloud.google.com\/terms\/\">Terms<\/a> and <a href=\"https:\/\/policies.google.com\/privacy\">Privacy<\/a>.<\/li>\n<\/ul>\n\n<p>API credentials are stored encrypted in the WordPress options table when OpenSSL is available. Translation jobs and error summaries are stored in the site's database. Site owners remain responsible for obtaining any required consent and for their provider account, billing, retention settings, and data-processing obligations.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Without an enabled automatic-translation provider, SysOpenLang keeps language relationships, translated strings, settings, workflow status, and jobs in the local WordPress database. It does not include analytics or usage tracking. Administrators can copy the suggested disclosure added by SysOpenLang to WordPress's Privacy Policy Guide and adapt it to the site's actual configuration.<\/p>\n\n<p>Removing the plugin preserves data by default to prevent accidental loss. Permanent cleanup can be authorized in SysOpenLang settings with an additional confirmation, or by defining <code>SYSOPENLANG_REMOVE_DATA<\/code> as <code>true<\/code>. Make a backup first.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload and activate SysOpenLang.<\/li>\n<li>Open SysOpenLang in the WordPress administration area.<\/li>\n<li>Configure languages and a default language.<\/li>\n<li>Edit content or taxonomy terms to create linked translations.<\/li>\n<li>Assign navigation menus and custom-field policies where needed.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20paid%20api%3F\"><h3>Do I need a paid API?<\/h3><\/dt>\n<dd><p>No. Manual translation works without an external service. Automatic translation requires an account and credential from the provider selected by the site administrator, and that provider may charge for usage.<\/p><\/dd>\n<dt id=\"does%20sysopenlang%20guarantee%20search%20indexing%20or%20legal%20compliance%3F\"><h3>Does SysOpenLang guarantee search indexing or legal compliance?<\/h3><\/dt>\n<dd><p>No. SysOpenLang outputs language-aware URLs and SEO metadata, but indexing decisions belong to search engines. Site owners must review translated content, privacy disclosures, provider terms, and laws applicable to their site.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20my%20translations%20when%20i%20uninstall%20the%20plugin%3F\"><h3>What happens to my translations when I uninstall the plugin?<\/h3><\/dt>\n<dd><p>They are preserved by default. See the Privacy section for the explicit cleanup options.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.20.36<\/h4>\n\n<ul>\n<li>Add the WordPress.org review fixes for admin nonces, translation-editor request validation, shortcode-editor request validation, dynamic-block output sanitization, and SEO translation sanitization.<\/li>\n<\/ul>\n\n<h4>1.20.14<\/h4>\n\n<ul>\n<li>Adds language-scoped public taxonomy slugs, so translated term URLs can use the requested slug while WordPress retains a collision-safe internal slug.<\/li>\n<\/ul>\n\n<h4>1.20.13<\/h4>\n\n<ul>\n<li>Adds a confirmed maintenance repair for taxonomy relationships on existing translated posts.<\/li>\n<\/ul>\n\n<h4>1.20.12<\/h4>\n\n<ul>\n<li>Synchronizes all taxonomy relationships when a translated post is created or saved, including repairs for translations created before taxonomy synchronization existed.<\/li>\n<\/ul>\n\n<h4>1.20.11<\/h4>\n\n<ul>\n<li>Create linked taxonomy translations on demand for translated posts, preserve same-language parent hierarchies, and accept language selection on REST term queries.<\/li>\n<\/ul>\n\n<h4>1.20.10<\/h4>\n\n<ul>\n<li>Automatically resolve translated taxonomy slug collisions with stable language and numeric suffixes.<\/li>\n<\/ul>\n\n<h4>1.20.9<\/h4>\n\n<ul>\n<li>Keep translated taxonomy names unchanged, use native unique WordPress slugs, and retain default-language taxonomy fallbacks until a translation exists.<\/li>\n<\/ul>\n\n<h4>1.20.8<\/h4>\n\n<ul>\n<li>Add default-term fallbacks and localized public taxonomy slugs, so translations can keep the same public slug without WordPress internal collisions.<\/li>\n<\/ul>\n\n<h4>1.20.7<\/h4>\n\n<ul>\n<li>Filter normal frontend taxonomy queries by the current SysOpenLang language, including categories generated dynamically by third-party modules.<\/li>\n<\/ul>\n\n<h4>1.20.6<\/h4>\n\n<ul>\n<li>Preserve deferred WPGraphQL resolver values instead of converting them to text during the listing title fallback.<\/li>\n<\/ul>\n\n<h4>1.20.5<\/h4>\n\n<ul>\n<li>Show omitted Divi text defaults such as Divi Blog Extras \u201cRead More\u201d in the translation editor and write the translated setting into the target shortcode.<\/li>\n<\/ul>\n\n<h4>1.20.4<\/h4>\n\n<ul>\n<li>Detect third-party Divi modules and their registered text controls directly in the translation editor, while excluding technical configuration fields.<\/li>\n<\/ul>\n\n<h4>1.20.3<\/h4>\n\n<ul>\n<li>Return a translated listing title when an empty ACF property-name field is requested through WPGraphQL.<\/li>\n<\/ul>\n\n<h4>1.20.2<\/h4>\n\n<ul>\n<li>Preserve source-language publication ordering for default WPGraphQL translated listings.<\/li>\n<\/ul>\n\n<h4>1.20.1<\/h4>\n\n<ul>\n<li>Expose the SysOpenLang language filter in native CPT-to-taxonomy GraphQL connection <code>where<\/code> inputs.<\/li>\n<\/ul>\n\n<h4>1.20.0<\/h4>\n\n<ul>\n<li>Filter WPGraphQL category, tag, and custom-taxonomy connections to the requested SysOpenLang language, including terms connected to a custom post type.<\/li>\n<\/ul>\n\n<h4>1.19.4<\/h4>\n\n<ul>\n<li>Keep normal frontend content queries tied to their requested URL language, even when a browser prefetches a different-language URL with the previous page as its referrer.<\/li>\n<\/ul>\n\n<h4>1.19.3<\/h4>\n\n<ul>\n<li>Limit secondary-query language filtering to public content post types, keeping internal Divi Theme Builder layouts intact.<\/li>\n<\/ul>\n\n<h4>1.19.2<\/h4>\n\n<ul>\n<li>Filter secondary public WordPress queries, including third-party Divi modules and widgets, to the active SysOpenLang language.<\/li>\n<li>Preserve language filtering for AJAX content queries using an explicit language, the referring language URL, or a configured language domain.<\/li>\n<\/ul>\n\n<h4>1.19.1<\/h4>\n\n<ul>\n<li>Keep shared WPGraphQL media attachments available while filtering their parent content by language.<\/li>\n<\/ul>\n\n<h4>1.19.0<\/h4>\n\n<ul>\n<li>Filter WPGraphQL post and custom-post-type connections by the active SysOpenLang language.<\/li>\n<li>Add an optional <code>sysopenlangLanguage<\/code> connection argument and request-level language overrides.<\/li>\n<\/ul>\n\n<h4>1.18.1<\/h4>\n\n<ul>\n<li>Added lightweight local SVG flags to make setup consistent across browsers and operating systems.<\/li>\n<li>Corrected language-preview spacing and button icon alignment.<\/li>\n<\/ul>\n\n<h4>1.18.0<\/h4>\n\n<ul>\n<li>Redesigned the initial setup as an interactive five-step assistant.<\/li>\n<li>Added searchable language selection, URL format cards, workflow defaults, and a final configuration review.<\/li>\n<li>Added a live language-selector preview with flags, translated or native names, inline and dropdown presentations.<\/li>\n<li>Improved responsive spacing, visual progress, and contextual navigation throughout setup.<\/li>\n<\/ul>\n\n<h4>1.17.0<\/h4>\n\n<ul>\n<li>Added a guided three-step first-install wizard for languages, URL format, and selector appearance.<\/li>\n<li>Redirected the first SysOpenLang visit to setup only on genuinely new installations.<\/li>\n<li>Kept upgraded and already configured sites outside the forced onboarding flow.<\/li>\n<\/ul>\n\n<h4>1.16.0<\/h4>\n\n<ul>\n<li>Added a guided first-run assistant and a centralized settings screen.<\/li>\n<li>Added configurable missing-translation, creation status, slug, metadata-copy, and source-change behavior.<\/li>\n<li>Added automatic-translation batch, retry, monthly-limit, result-status, duplicate-job, and permission controls.<\/li>\n<li>Added role-based translation access and independently configurable source-change recipients.<\/li>\n<li>Added incomplete-translation indexing controls, timed string discovery, shared-media exceptions, cache cleanup, job retention, translation-memory cleanup, and confirmed uninstall cleanup.<\/li>\n<\/ul>\n\n<h4>1.15.0<\/h4>\n\n<ul>\n<li>Add safe generic discovery for structured visual-builder metadata without exposing technical design fields.<\/li>\n<li>Add a read-only builder-field inspector to diagnostics and stable element IDs that survive reordering.<\/li>\n<li>Add taxonomy SEO translation for supported providers and language-aware AIOSEO sitemap exclusions.<\/li>\n<li>Add import validation, conflict preview, automatic backups, and one-click rollback.<\/li>\n<li>Add translation-editor status filters, visible-field counts, WordPress revision access, and persistent translation-memory caching.<\/li>\n<li>Add PHP 7.4 through 8.3 CI coverage, distributable ZIP validation, and the official Plugin Check action.<\/li>\n<li>Add WordPress.org banner and icon artwork, refreshed localization template, and a compatibility guide.<\/li>\n<\/ul>\n\n<h4>1.14.0<\/h4>\n\n<ul>\n<li>Create or safely adopt translated WooCommerce variations using stable source-variation relationships.<\/li>\n<li>Map global attribute terms and variation slugs to their target-language taxonomy translations.<\/li>\n<li>Synchronize variation prices, inventory, downloads, dimensions, images, status, and ordering without duplicating SKUs or global identifiers.<\/li>\n<li>Expose variation descriptions in the manual translation editor, translation memory, and automatic provider jobs.<\/li>\n<\/ul>\n\n<h4>1.13.0<\/h4>\n\n<ul>\n<li>Preserve Divi, Gutenberg, and nested ACF translations when source structures are deleted, inserted, or reordered.<\/li>\n<li>Add ordered language fallbacks, contextual translation-memory provenance, and translated media metadata without duplicating files.<\/li>\n<li>Add an extensible content-extractor API and native Elementor JSON extraction for manual and automatic translation.<\/li>\n<li>Make core, Yoast SEO, Rank Math, and SEOPress sitemap output aware of translated URLs and hidden languages.<\/li>\n<li>Improve background-job recovery and safe WooCommerce synchronization for operational product data and translated related products.<\/li>\n<li>Add deterministic database migrations and configurable uninstall cleanup.<\/li>\n<\/ul>\n\n<h4>1.12.0<\/h4>\n\n<ul>\n<li>Stop creating attachment translations and reuse WordPress media across translated content by default.<\/li>\n<li>Add unified and language-separated Media Library modes under SysOpenLang settings.<\/li>\n<li>Filter the Media Library and media selectors by the current content language in separate mode.<\/li>\n<li>Hide legacy translated attachment copies reversibly in unified mode without deleting files or records.<\/li>\n<\/ul>\n\n<h4>1.11.0<\/h4>\n\n<ul>\n<li>Track source fingerprints for Divi fields so deleted or inserted modules do not shift existing translations.<\/li>\n<li>Realign legacy translated values using exact identities and translation memory.<\/li>\n<li>Synchronize new Divi sections, images, and technical settings from the current source layout when saving.<\/li>\n<\/ul>\n\n<h4>1.10.1<\/h4>\n\n<ul>\n<li>Keep dynamic plugins and widgets visible while previously unseen strings are discovered.<\/li>\n<li>Apply preloaded translations directly inside the mutation cycle instead of hiding the complete shortcode root.<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li>Preload known dynamic shortcode translations in the initial page response.<\/li>\n<li>Apply cached translations immediately when JavaScript creates content.<\/li>\n<li>Prevent source-language flashes while new dynamic content is being translated.<\/li>\n<li>Keep REST requests as a fallback for newly discovered strings and cache recent results in the browser.<\/li>\n<\/ul>\n\n<h4>1.9.1<\/h4>\n\n<ul>\n<li>Exclude Divi alignment, orientation, placement, direction, and other visual control values from translation fields.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Add an Edit translation action to the front-end WordPress toolbar when viewing linked translated content.<\/li>\n<\/ul>\n\n<h4>1.8.2<\/h4>\n\n<ul>\n<li>Protect Slider Revolution aliases, encoded shortcodes, and Divi module configuration from page translation.<\/li>\n<li>Discover visible Slider Revolution layer text through the shortcode translation workflow.<\/li>\n<li>Restore an altered encoded slider shortcode from the original layout on the next translation save.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Import translations created before translation memory was introduced.<\/li>\n<li>Treat untouched target fields that still equal the source as replaceable placeholders.<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Added a local exact-match translation memory for manual and automatic translations.<\/li>\n<li>Repeated empty fields are filled from previously saved translations without overwriting existing content.<\/li>\n<li>Matching repeated fields in the same editor stay synchronized after a translation is entered.<\/li>\n<li>Added a visual indicator when a value was applied from translation memory.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Exclude URL-encoded Divi configuration objects and UUID-based global design metadata from translation fields.<\/li>\n<li>Expand automatic technical-attribute detection without hiding third-party module titles or content.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>Discover translatable attributes and body text from third-party Divi modules automatically.<\/li>\n<li>Recognize registered Divi modules and unknown modules carrying standard Divi metadata.<\/li>\n<li>Exclude technical settings, URLs, IDs, JSON, styling and dynamic-content payloads.<\/li>\n<li>Avoid duplicated content from nested carousel and container modules.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Register the Global content screen after the SysOpenLang parent menu so administrators can access it correctly.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Resolve all blocking errors reported by WordPress Plugin Check.<\/li>\n<li>Replace the dynamic route query with a fully prepared and cached lookup.<\/li>\n<li>Add persistent cache handling for translation relationships and interface strings.<\/li>\n<li>Harden JSON imports with uploaded-file, size and file-type validation.<\/li>\n<li>Clarify nonce handling and field-specific sanitization in the translation editor.<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>Map Gutenberg reusable-block and navigation references to published translations.<\/li>\n<li>Rewrite internal block links to translated posts while preserving query arguments and fragments.<\/li>\n<li>Keep external links and missing or unpublished translation destinations unchanged.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Add a Global content screen for block templates, template parts, navigation and reusable patterns.<\/li>\n<li>Resolve published block-template and template-part translations for the requested frontend language.<\/li>\n<li>Keep source templates as fallback while translations remain unpublished.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Apply saved interface translations to gettext output from themes and plugins.<\/li>\n<li>Support contextual gettext strings and basic singular\/plural variants.<\/li>\n<li>Preserve native WordPress translations as fallback and avoid discovery writes while disabled.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<ul>\n<li>Detect the requested language before WordPress renders locale-dependent content such as calendars.<\/li>\n<li>Keep calendar day, month, and year archive links inside the current language path.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<ul>\n<li>Map Gutenberg table headers, cells, and captions as individual translation fields.<\/li>\n<li>Preserve table rows, sections, attributes, and inline formatting when translations are applied.<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<ul>\n<li>Keep the current language visible when no translated destination is available.<\/li>\n<li>Avoid rendering an empty dropdown for content with only one available language.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<ul>\n<li>Hide languages without a published translation from switchers on individual content.<\/li>\n<li>Apply translation availability checks to pages, posts, custom post types, and taxonomy terms.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Added block-level Gutenberg extraction and editing without exposing block comments or JSON.<\/li>\n<li>Added generic support for nested third-party block attributes and dynamic block output.<\/li>\n<li>Added translated synchronized-pattern reference mapping and automatic-translation integration.<\/li>\n<\/ul>\n\n<h4>1.2.10<\/h4>\n\n<ul>\n<li>Reduced actionable Plugin Check warnings by sanitizing submitted settings and translation fields.<\/li>\n<li>Prepared dynamic table identifiers with WordPress identifier placeholders.<\/li>\n<li>Removed obsolete manual text-domain loading; WordPress loads plugin translations automatically.<\/li>\n<\/ul>\n\n<h4>1.2.9<\/h4>\n\n<ul>\n<li>Escaped the translation job action markup reported by Plugin Check.<\/li>\n<\/ul>\n\n<h4>1.2.8<\/h4>\n\n<ul>\n<li>Reworked remaining database reads to use prepared identifier placeholders.<\/li>\n<li>Replaced discouraged HTML stripping calls with WordPress APIs.<\/li>\n<\/ul>\n\n<h4>1.2.7<\/h4>\n\n<ul>\n<li>Standardized typography in visual translation fields and strengthened section dividers.<\/li>\n<\/ul>\n\n<h4>1.2.6<\/h4>\n\n<ul>\n<li>Added visual dividers between content, custom field, and SEO translation sections.<\/li>\n<\/ul>\n\n<h4>1.2.5<\/h4>\n\n<ul>\n<li>Separated original and translated content into distinct side-by-side panels.<\/li>\n<\/ul>\n\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Improved spacing between translation field cards.<\/li>\n<\/ul>\n\n<h4>1.2.3<\/h4>\n\n<ul>\n<li>Introduced an original SysOpenLang translation workspace design with responsive field cards.<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Updated database queries to use prepared identifier placeholders.<\/li>\n<li>Declared compatibility with WordPress 7.0.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Added complete distribution licensing and clearer third-party service disclosures.<\/li>\n<li>Updated release metadata and privacy guidance for directory submission.<\/li>\n<li>Hardened dynamic shortcode translation requests and validation.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added visual translation editing for builder content and custom fields.<\/li>\n<li>Added language-aware content, taxonomy, menu, shortcode, SEO, and Theme Builder workflows.<\/li>\n<li>Added configurable OpenAI, Anthropic, Gemini, and Google Translate providers with queued jobs.<\/li>\n<li>Added language-switcher presentation controls, diagnostics, and administration usability improvements.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Replaced the basic language table with a complete, sectioned language-settings experience.<\/li>\n<li>Added a built-in language catalog, custom languages, native names, flags, locales, and text direction.<\/li>\n<li>Added functional directory, query-parameter, and per-language domain routing modes.<\/li>\n<li>Added configurable switcher content, dropdown\/footer output, missing-translation handling, and hidden languages.<\/li>\n<li>Added administration-language selection, opt-in browser-language redirect, and theme string discovery controls.<\/li>\n<li>Added domain redirect allowlisting and expanded routing tests.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Added modular service registry and public extension contracts.<\/li>\n<li>Added menus, media, editorial workflow, custom-field policies, and source-change tracking.<\/li>\n<li>Added safe WooCommerce product metadata policy and synchronization.<\/li>\n<li>Added translation providers, queued jobs, REST job creation, and cron processing.<\/li>\n<li>Added string discovery, plural translation, portable JSON import\/export, and WP-CLI.<\/li>\n<li>Added runtime\/object caching, Site Health diagnostics, privacy disclosure, capabilities, and expanded tests.<\/li>\n<\/ul>\n\n<h4>0.9.0<\/h4>\n\n<ul>\n<li>Added diagnostics, caching, privacy guidance, multisite-safe lifecycle behavior, and capabilities.<\/li>\n<\/ul>\n\n<h4>0.8.0<\/h4>\n\n<ul>\n<li>Added portable backup\/merge import, administrative REST operations, and WP-CLI commands.<\/li>\n<\/ul>\n\n<h4>0.7.0<\/h4>\n\n<ul>\n<li>Added optional string discovery, plural helpers, and string portability.<\/li>\n<\/ul>\n\n<h4>0.6.0<\/h4>\n\n<ul>\n<li>Added provider contracts and a background translation-job queue.<\/li>\n<\/ul>\n\n<h4>0.5.0<\/h4>\n\n<ul>\n<li>Added a safe WooCommerce product metadata integration layer.<\/li>\n<\/ul>\n\n<h4>0.4.0<\/h4>\n\n<ul>\n<li>Added reusable metadata policies for ACF and page-builder fields.<\/li>\n<\/ul>\n\n<h4>0.3.0<\/h4>\n\n<ul>\n<li>Added translation workflow state, menu mapping, and attachment translations.<\/li>\n<\/ul>\n\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>Added taxonomy translations, pretty URLs, REST discovery, language-aware queries, and SEO metadata.<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial multilingual content, custom-field, string, and language-switcher foundation.<\/li>\n<\/ul>","raw_excerpt":"A free, community-first multilingual foundation for WordPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/351929","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=351929"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/juanu96"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=351929"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=351929"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=351929"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=351929"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=351929"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=351929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}