POM Translate
Changelog
Changelog
All notable changes to POM Translate are documented in this file.
Changes pending release tag
- fix: Preserve percent-encoded query parameters in navigation, shortcode, and floating language selectors so language changes retain search and filter values.
- docs: Clarify query parameter preservation across language selector types and formats.
- fix: Load the output-buffer runtime defensively and keep WordPress requests available during partial or stale deployments.
- fix: Restore localized WooCommerce checkout endpoint query variables so pretty order-confirmation URLs resolve without changing order-key or customer authorization.
- fix: Match the one-order Store API checkout hook contract, validate WooCommerce orders defensively, and persist normalized order locales idempotently for Checkout Blocks.
- fix: Shield protected formatting and application markers from machine-translation providers, restore harmless transport variations, and retry invalid marker replies once with corrective instructions.
- fix: Prevent formatting-marker boundaries from being misread as printf placeholders and keep Visual Composer indentation outside stored translations.
- fix: Recalculate and restart generation progress for the translation stage, include pending Other translations in its real task total, and reserve 100% for completed jobs.
- fix: Normalize harmless spacing inside protected application markers and retry unresolved contextual batch members individually before leaving them pending.
- build: Synchronize the recursive POM Knowledge Markdown tree to
wp-content/docs/pom-knowledgeduring local release builds while excluding hidden and non-Markdown files. - build: Update POM Framework so managed file reads are cached per request and OPcache remains an optional acceleration layer.
- fix: Read machine-translation source snapshots from the database writer under HyperDB and report genuine concurrent source changes as HTTP 409 instead of 500.
- fix: Preserve subject identity in contextual immediate-translation batches so unchanged source rows are not rejected as concurrent edits.
- perf: Prepare translation-manager row and subject context once per request, prime visible WordPress objects in batches, and route known columns directly without changing links or table output.
- perf: Enable request-scoped read memoization in wp-admin, invalidate it immediately after settings or translation writes, and reuse pure registered-string translations per locale.
- fix: Detect per-site and network-wide plugin set changes before deferring WooCommerce email source synchronization.
- perf: Defer WooCommerce email source synchronization to changed definitions and editor access instead of persisting every email field during normal requests.
- fix: Preserve numeric-only slugs as strings throughout persistent-cache misses and accept post-like objects from permalink filters.
- feat: Add a pending-only bulk translation mode that skips source discovery and processes unresolved strings already stored in POM Translate.
- docs: Document the full-processing and pending-only choices in the bulk translation guide.
- Changes included in version 0.179.
New features
- Run pending-translation generation as a resumable server-side job with persisted cursors, cron continuation, pausing, and bounded retries.
- Redesign the WooCommerce email translation workspace with a sober WordPress-native interface, completion progress, source comparison, insertable placeholders, recent-order selection, responsive preview, and per-field POM AI actions.
Fixed
- Isolate locale-sensitive runtime caches across language and multisite switches, invalidate them immediately after translation or slug changes, and never persist false misses after database errors.
- Preserve UTF-8 registered-string matching, WordPress and theme lazy-loading attributes, and byte-identical HTML when the output buffer makes no replacement.
- Build canonical alternate links from an unprefixed base path so hreflang URLs never acquire duplicate locale prefixes and return 404.
- Coordinate generation start, stop, browser acceleration, and cron with one owner lock, verified checkpoints, and recovery of missing worker events.
- Scan content with stable primary-key cursors and pause without advancing when a source query, parser step, or repeated provider result is unusable.
- Retry incomplete OpenAI responses with bounded jitter, classify refusals and truncation explicitly, and protect idempotent account requests from concurrent execution.
- Keep schema migration 9 pending until the queue table and every eligible legacy row have been verified.
- Recover stranded machine-translation queues with an independent hourly watchdog and preserve visible queue counts while background processing is disabled.
- Serialize all machine-translation provider work through one lock and stop manual queue loops when no entry was actually resolved.
- Verify translation database writes before resolving queue entries and preserve provider retry metadata through the client.
- Make the pending-translation generator process every unresolved stored string, including registered defaults and rows with retained pending text.
- Match POM AI word accounting for protected formatting markers and retry provider size rejections as smaller translation chunks.
- Display translated email subjects, prepare order, account, note, and refund previews without calling delivery triggers, invalidate stale previews when context changes, warn about unsaved edits, and prevent duplicate requests.
- Preserve case-sensitive WooCommerce extension email IDs during selection, preview, and test sends, and distinguish duplicate template titles by their Admin or Customer audience.
- Keep WooCommerce email template gettext, subjects, headings, additional content, footer copy, item data, and bodies in the stored order locale with leak-safe locale overrides and restoration.
- Accept partial WooCommerce variation-option filter context and avoid persisting dynamic notices containing customer or order data.
- Honor explicit language parameters and headers in WooCommerce AJAX and Store API requests.
- Keep WooCommerce My Account endpoint and value segments from adding a second locale prefix to already localized account permalinks.
- Restore native and extension My Account endpoint query vars on localized routes, including endpoints with trailing values.
- Reject stale machine-translation replies and manual REST translations that alter protected placeholders.
- Refresh source strings after authorized programmatic product and taxonomy saves that run without a logged-in user.
Performance
- Batch and persist hot string, translation, exclusion, and route lookups, memoize repeated settings decisions, and bound small slug dictionaries to one indexed request-local read.
- Prefer persistent object-cache batches over locale-wide slug priming, batch fallback path localization, and reset request dictionaries after slug deletion.
- Avoid translating terms twice while WordPress assembles object collections, and defer post exclusion reads until a requested meta key is known to be translatable.
- Retain site-and-locale-scoped database request caches across temporary language switches so SEO and progressive rendering do not repeat identical reads.
- Skip output-buffer URL checks and DOM parsing when the response cannot contain a registered-string or custom-URL replacement, and scan translatable attributes in one XPath pass.
- Enqueue and checkpoint bounded machine-translation rows directly with conditional writes instead of loading and rewriting the complete queue.
- Store queued strings as independent database rows, bulk-load string and translation records, and build adaptive context-preserving translation batches.
- Bound each scheduled machine-translation run to 20 queued strings and one 400-word provider batch, exclude individually oversized strings without provider calls, and serialize concurrent queue mutations.
- Prime term and menu translation rows in bulk and update the registered-string request cache without full-map reloads.
Security
- Bound translation REST pagination, require enabled locales and existing string IDs, and validate protected placeholders before writes.
Documentation
- Document resumable generation jobs, adaptive batch limits, queue recovery, and bounded provider retries.
- Replace the duplicated POM AI machine-translation templates with code-backed guides to service requirements, licensing, domain authorization, context, credits, local quotas, background processing, retries, troubleshooting, and review.
- Replace the duplicated software-string templates with code-backed guides to registered values, gettext domains and context, source changes, plugin and theme catalogs, browser-only editing, POM AI drafts, PO/MO export, installation, retirement limits, and troubleshooting.
- Replace the duplicated WooCommerce templates with code-backed guides to catalog content, attributes, variations, localized requests, account routes, order locales, notices, managed emails, placeholders, previews, extension boundaries, background work, and troubleshooting.
- Replace the duplicated multilingual SEO templates with code-backed guides to translated metadata, localized canonical URLs, hreflang clusters, fallback indexing decisions, crawler access, Rank Math and Yoast sitemap behavior, and production review.
- Replace the duplicated import, export, and maintenance templates with code-backed guides to JSON scope, exact-match imports, backups, validation, orphan cleanup, local quota resets, storage resets, migration, and removal planning.
- Replace the duplicated developer templates with code-backed concepts, helper signatures, registration patterns, public hook contracts, and supported machine-translation integration boundaries.
- Audit all public POM Translate articles against the current implementation, remove private service contracts, correct interface paths and machine-translation limits, and clarify supported extension points.
- Replace the duplicated recipe templates with end-to-end workflows for brochure sites, blogs, navigation, WooCommerce, structured models, custom emails, third-party compatibility, and staged machine translation.
- Replace the duplicated help templates with layered diagnostics for rendering, fallback, caches, skeletons, registered strings, menus, selectors, localized routes, background jobs, POM AI authorization, WooCommerce emails, and safe support evidence.
- Replace the duplicated bulk-translation templates with code-backed guides to Translation Manager scopes, pending discovery, browser generation, scheduled queues, stopping, retries, review, exclusions, URLs, and gettext catalogs.
- Replace the duplicated selector merge-tag templates with code-backed references for all eleven values, fallbacks, flag outputs, safe composition, label recipes, sanitization, and routing boundaries.
- Replace the duplicated language-selector templates with code-backed guides to navigation, shortcode, floating and adaptive dropdown output, labels, markup, exclusions, current-language behavior, accessibility, responsive design, and troubleshooting.
- Replace the duplicated URL-routing templates with code-backed guides to locale prefixes, post and term slugs, custom destinations, canonical and alternate links, redirects, rewrite refreshes, conflicts, exclusions, and 404 diagnosis.
- Replace the duplicated menu-and-link templates with code-backed guides to menu labels, descriptions, language visibility, native routes, custom and external destinations, content links, home links, fallbacks, cache refresh, and troubleshooting.
- Replace the duplicated taxonomy templates with code-backed guides to categories, tags, custom terms, names, descriptions, localized slugs, hierarchical archive URLs, source changes, and troubleshooting.
- Replace the duplicated content-selection templates with code-backed guides to post-type parts, registered metadata, taxonomy eligibility, software-string boundaries, and safe surface retirement.
- Replace the duplicated content-translation templates with code-backed guides to the editor, supported fields, structured content, workflow status, review, publication, fallback, and source-change handling.
- Replace the duplicated language-configuration templates with code-backed guides to locale selection, labels, ordering, prefixes, browser redirects, fallback behavior, and safe language retirement.
- Replace the duplicated architecture templates with code-backed guides to extraction, skeleton generation, storage, language context, rendering, URLs, registered strings, performance, and cache coordination.
- Replace the duplicated start-here templates with code-backed installation, licensing, first-translation, visitor-verification, launch, and maintenance guides.
- Add the documentation manifest that defines article order for POM Docs Sync.
- Give every POM Translate documentation directory, article, and asset a globally unique product-scoped name and update all internal links.
- Enforce numbered documentation topics with no root Markdown files and complete index pages for every topic directory.
- Reorganize and expand all public translation documentation under numbered POM Docs Sync terms.
- Clarify that public documentation must be reader-focused and exclude internal operational material.
- Standardize numbered screenshot placeholders for public Markdown documentation.
- Document the production WooCommerce, email, background machine-translation, batching, and integration contracts.
Build
- Align plugin and Composer requirements with PHP 8.2, WordPress 6.9, and verified WordPress 7.0 compatibility.
- Changes included in version 0.178.
Internal
- Published a maintenance release to verify private update detection on WordPress multisite.
- Changes included in version 0.177.
New features
- Machine translation on a multisite subsite now requires that site's own POM AI license, which authorizes the domain to consume credits from the license owner's account; it never inherits the network POM AI key.
- Added the network-aware missing/invalid license admin notice and free-subscription cost info on the License tab.
- Added the License tab to the existing settings page (Settings > POM Translate > License) through the shared POM Framework license client; the free plan still requires a valid license for private downloads and updates.
- Added a parser hook so integrations can register nested strings inside shortcode attributes without extracting technical values.
- Added Content URLs and Custom links summaries that show stored localized slugs and translated custom URL mappings.
Fixed
- Added an always-visible multisite subsite license message explaining the main-site activation and network-license requirements for automatic updates.
- Prevented translated page-builder skeletons from being wrapped in paragraph tags before shortcode rendering.
- Ignored stale persistent slug lookup misses and refreshed slug caches when localized slug values are saved unchanged.
- Kept the active locale aligned with prefixed translated slug requests after query-var fallback resolution.
- Resolved localized slug routes through a request-level fallback so translated URLs do not remain 404s when rewrite parsing misses the language rule.
Security
- Replaced the legacy POM AI Authorization pair used by machine translation with the shared POM AI license key, domain header, and replay-protected exact-body signature; fallback updates now use licensed v2 tokens only.
Documentation
- Required complete production-facing documentation maintenance and the canonical access-denying
.htaccessin repository agent guidance. - Standardized pending and historical release notes under the current categorized changelog format.
- Updated the release procedure to require dated changelog headings.
Build
- Centralized plugin documentation under
wp-content/docs/pom-translateduring local release builds and excluded thedocstree from ZIP artifacts. - Sourced manifest release notes from versioned changelog sections and rejected invalid changelog structures during builds.
- Accepted mandatory ISO release dates in versioned changelog headings when generating manifests.
- Pruned repository metadata from Composer dependencies before packaging production ZIPs.
Internal
- Standardized incremental changelog maintenance and required
CHANGELOG.mdin release packages.
- Changes included in version 0.176.
Internal
- Established the existing release baseline before adoption of the incremental changelog workflow.
- Changes included in version 0.117.
New features
- Added AJAX-driven pending translation generator.
- Allowed editors to manage translations.
- Added controls for queued machine translations.
Fixed
- Prevented home_url localization during permalink rewrites.
- Fixed locale validation for translation batches.
- Fixed translation loading timing and tidy global imports.
Changed
- Batch MT requests in generation tool.
- Process queued translations in batches and clear queue.
- Normalize locales for translation batches.
- Preload translations for queried posts.
- Translation files updated.
- Changes included in version 0.116.
Changed
- Updated helpers.php file.
- Handle CPT archive URLs.
- Updated home url.
- Skip placeholder validation when translation is empty.
- Moved PHP stubs under tests.
- Removed stubs folder.
Build
- Updated build script.
- Fixed composer cs errors.
- Added cs-fix composer script.
Internal
- Increase PHPStan memory limit.
- Added stubs and docblocks for PHPStan coverage.
- Exclude vendor and node_modules from cs-fix.
- Changes included in version 0.115.
New features
- Added language management helpers.
- Added WooCommerce email translation support.
- Added helper for getting the translated url of a given url.
- Allowed forced locales to localize admin requests.
- Allowed dismissing machine translation failure notice.
- Added button class option and icon for language switcher.
Fixed
- Corrected POM Multilingual string -> POM Translate.
Changed
- Improved updater.php.
- Updated lang switcher shortcode markup.
Performance
- Ensured term queries respect selected locale.
Documentation
- Emphasize composer cs compliance.
Build
- Updated release artifacts directory.
- Improved build process.
- Composer.lock.
- Changes included in version 0.114.
Fixed
- Added parameter docs and fix indentation in helpers polyfills.
Changed
- Updated updater.php file.
- Lower minimum PHP version to 7.4.
- Changes included in version 0.113.
Build
- Updated RELEASES.md.
- Ensured release manifest includes required metadata defaults.
- Changes included in version 0.112.
New features
- Implemented secure updater integration.
Changed
- Improved updater.
- Validate manifest keys and tag S3 uploads.
Documentation
- Seed changelog history.
- Updated AGENTS.md.
- Updated README.md.
Build
- Added latest manifest pointer for releases.
Internal
- Removed phpunit cache file.
- Changes included in version 0.111.
Documentation
- Fixed changelog extraction in release script.
- Changes included in version 0.110.
Build
- Fixed release workflow YAML indentation.
- Changes included in version 0.109.
Build
- Made S3 upload optional in release workflow.
- Changes included in version 0.108.
Internal
- Recorded the tagged release milestone.
- Changes included in version 0.107.
New features
- Added dummy updater.
Security
- Fixed cookie language preference sanitization.
Build
- Fixed shortcode replacement order when mixing page builder tags.
- Added manifest generation to release build script.
- Added S3 upload step to release workflow.
- Document release replication steps for other plugins.
Internal
- Annotate taxonomy objects for PHPStan.
- Fixed taxonomy detection docs and phpstan errors.
- Changes included in version 0.106.
Fixed
- Fixed locale detection tests by stubbing esc_url_raw.
- Changes included in version 0.105.
Fixed
- Fixed WordPress coding standards violations.
Build
- Updated RELEASES.md.
- Automate GitHub release publishing.
- Changes included in version 0.104.
Internal
- Recorded the tagged release milestone.
The entries below reconstruct unversioned or previously undocumented development before this repository adopted incremental release notes. Each active month consolidates its non-merge Git commits; merge-only, version-number-only, and internal tracking-only commits are omitted.
2026-06
Fixed
- Render: guarded skeleton placeholder output.
- URLs: guarded singular permalink home URL filtering.
- URLs: localize prefixed custom menu links.
- Framework: import framework classes consistently.
- Render: normalize numeric internal link slugs.
- Redirects: preserved complete GET query strings during language prefix redirection.
- Releases: hardened private release publishing.
Security
- Security: POM Framework - Harden settings AJAX and dependency toolchain.
Changed
- Framework: POM Framework - Rename Pomatio Framework.
- Translation Runtime: removed optional translation features.
2026-05
New features
- Faceted Search: POM Theme/POM Translate - Add query-scoped localization fields. Adds query-scoped pom-translate localization fields for faceted/archive result queries so high-volume listings can skip post_content reconstruction when templates do not render content. Also lets indexed faceted metadata bypass duplicate pom-translate meta processing while preserving default behavior for queries without an explicit policy.
- Translation Manager: link string contexts to source objects.
Fixed
- Render: honored explicit post content context.
- Parser: extract nested contact form shortcode fields.
- Styles: removed min-width from language switcher toggle.
- Pom Translate: extract VC nested contact form strings.
- Pom Translate: extract nested VC contact form fields.
- URLs: preserved localized draft previews.
- Pom Translate: added support for long nested shortcode block keys. Fixes extraction persistence for deeply nested page builder/contact-form shortcode attributes. The parser already detected the labels/placeholders, but their generated block paths exceeded the indexed VARCHAR(191) database column. The full block path is now stored as LONGTEXT and identified by a SHA1 hash in the unique key.
Documentation
- Updated AGENTS.md file.
2026-04
New features
- Pom Translate: show post translation progress in editor panel.
- Pom Translate: added per-post-type translatable field controls.
- Pom Translate: batch machine translations by post subject.
- Pom Translate: added translator notes to machine translation prompts.
- Merge Tags: pomatio Framework - Add robust nested merge tag parsing.
- Pom Form: added bulk open and close controls to repeaters.
Fixed
- Pom Translate: hardened MT batch logging and queue scheduling.
- Pom Translate: allowed software MT for base locale and keep empty msgstr rows empty.
- Pom Translate: kept root file endpoints out of locale prefixes.
- Pom Translate: preserved leading text in translated fragment links.
- Pom Translate: allowed posts to be disabled without changing default translation parts.
- Admin: restrict software translations access.
- Translation: format translated content and skip unpublished posts.
- Machine translation: show inline AJAX failure notices.
- Parser: split loose classic editor content.
- Machine translation: added quota reset and avoid quota 500s.
- Machine translation: hardened provider response parsing and queue retries.
- Machine translation: surface missing AI credits.
- Machine translation: allowed percentage values with protected placeholders.
- Machine translation: aligned editor placeholder validation for percentages.
- Machine translation: optimized batch processing and error handling for machine translation requests.
- Translation Manager: persist filters and harden per-row MT.
- Pom Form: contain CodeMirror horizontal overflow.
Security
- Pom Translate: normalize escaped MT line breaks and nbsp entities.
- Pom Form: pomatio Framework - Apply WordPress file permissions to generated settings.
2026-03
New features
- URLs: enhanced taxonomy handling with new segment processing methods.
- New hooks and cache invalidation tools.
Fixed
- Language Switcher: own dropdown styles and auto alignment.
- Pom Translate: localize admin preview links and resolve CPT singles by ID.
Changed
- Pomatio Framework updated.
- Language Switcher: simplified toggle styles and improve menu layout.
Documentation
- AGENTS.md update.
2026-02
Fixed
- Fixed PHP warnings.
2026-01
New features
- Enhanced translation stubs and add WooCommerce support.
- Added unique foreign key name generation for translations table.
- Software Translations: removed runtime gettext capture and add PO/MO export workflow.
- Added translation tool styles and enhance import/export functionality.
- Helpers: added locale label helper functions for admin UI compatibility.
Fixed
- Updated version number to 0.173 in plugin header.
2025-11
Performance
- Improved cache invalidation and slug localization.
2025-10
Fixed
- Stub get_shortcode_regex for tests.
Changed
- Guarded meta parsing when WP helpers are unavailable.
Documentation
- Added release engineering guide.
- Added release command snippet.
Build
- Updated RELEASES.md.
2025-09
New features
- Added parser to store skeleton and strings.
- Enabled strict types and tidy parser.
- Implemented rendering of stored translations.
- Added basic translation manager UI.
- Added term and menu parsing, locale utilities, and URL scaffolding.
- Resolve translated post meta.
- Render: translate terms and cache menus.
- Slugs: added localized slug storage and URL rewriting.
- Translation: added status management.
- REST API: register translation routes.
- URLs: handle locale prefixes in paths.
- Detect locale from URL, cookie and browser.
- Parser: handle page builder shortcodes.
- Admin: style translation manager statuses.
- Admin: added localized slug editor.
- Added pom_translate_get_all_languages to helpers.php.
- Added languages list to the settings page for testing purposes.
- Added Rank Math SEO integration.
- Admin: added subject filters and manage link.
- Added configurable language switcher.
- Added custom walker for language switcher menu UI.
- Added eu, cs, gl and arg flags.
- Define base setup language fields.
- Added TODOs.
- Helpers: derive languages from settings.
- Admin: added flag links for locale selection.
- Language Switcher: added configurable switcher settings and templates.
- Added languages icon.
- Added MT translation functions.
- Machine translation: added automated mt pipeline.
- Ensured MT bridge loads when enabled.
- Added default meta translation keys.
- Allowed language switcher markup without text fallback.
- Added button markup to dropdown and dropups lang switchers.
- Added inline styles to floating language switcher container.
- Added main language custom label support.
- Added optional base language prefixes.
- Added tools.
- Added locale-specific date format support.
- Added MT trigger and UI enhancements to translation manager.
- Document registered string helpers.
- Browser Detection: added cookie-aware locale redirects.
- Added placeholder validation to translation manager.
- Added server-side placeholder validation for translations.
- Added orphan translation cleanup tool.
- Added configurable content types and tests.
- Added helpers to fetch translated post fields.
- Added taxonomy translation controls.
- Added request-level caching for slug lookups.
Fixed
- Register rewrite hooks.
- Locale: ignore persistent cookie.
- Fixed url rewriting 404.
- Reset translations when source changes.
- Clean up unused translation strings.
- Dedupe post strings and reuse translations.
- Repair parser tokenization flow.
- Restored bulk string deletion helper.
- Parser: dedupe VC strings and reuse translations.
- Database: reuse translations for duplicate strings.
- Backfill translations for identical strings.
- Parser: avoid deprecated mb_convert_encoding.
- Improved slug saving feedback and canonical URLs.
- Localize internal links in translated content.
- Load static front page for localized root.
- URLs: kept localized home canonical.
- Render shortcodes in translated content.
- Database: preserved placeholder order.
- Allowed optional args in menu class filter.
- Menu: wire language switcher add button.
- Skip localizing language switcher links.
- Load menu edit walker dependency.
- Admin: aligned language switcher menu UI with meta box pattern.
- Base Setup: improved language field metadata.
- Limit fallback language options.
- Used dedicated flag svgs for specific locales.
- Normalize localized paths for switcher.
- Refactored language switcher outputs.
- Language Switcher: respected hide current language.
- Language Switcher: improved dropdown placeholder handling.
- Menu: translate descriptions and fallback to base label.
- Language Switcher: inline icon for hidden toggle.
- Sync gettext locale with front-end language.
- Cache request locales for frontend gettext.
- Avoid overriding base locale on unprefixed URLs.
- Resolve taxonomy archives for localized URLs.
- Improved background machine translation batching.
- Parser: split vc list items into individual strings.
- Fixed placeholder ordering when rendering VC skeletons.
- Prevented admin meta translation overrides.
- Settings: made additional languages sortable.
- Dropped stubs folder from release zip.
- Fixed VC raw HTML decoding and reencoding.
- Fixed inline placeholder IDs for nested spans.
- Normalize translation line breaks.
- Fixed placeholder validation data and fallback.
- Alert on save when placeholder errors present.
- API request errors now return an array with error info.
- Handle machine translation errors.
- Prevented admin render filters from overriding base values.
- Include post meta in subject filter and fix pagination redirect.
Security
- Menu: include nonce when adding language switcher.
Changed
- Tokenize shortcode params and attributes during parsing.
- Only mark edited strings as human and keep table after save.
- Translations per page bumbed from 20 to 100.
- Externalize language dataset.
- Updated pom-form.
- Updated lang switcher.
- Gettext locale is working now.
- Updated helpers for MT.
- Handle inline text when parsing VC fragments.
- Changed admin menu position.
- Hid MT button when LLM disabled.
- Updated es translations.
- Document string helper usage examples.
- Flush permalinks after saving main settings.
- Handle void inline elements in parser.
- Enhanced translation manager editors.
- Made translation editors auto-size to content.
- Improved real-time placeholder validation notices.
- Improved placeholder placeholder parsing for literal percent values.
- Improved tools.
- Renamed admin tabs.
- Enhanced translation maintenance tools.
- Lock translation manager during MT jobs.
- Ensured core post types remain always translatable.
- Ensured post objects expose translated fields.
- Updated Spanish translation.
- Force base locale in admin contexts.
- Removed translations redirect on admin if no results.
- Handle fallback parsing for plain text content.
- Auto-register strings on first translation lookup.
Performance
- Cache slug lookups during content rendering.
- Invalidate menu caches when translations change.
- Added caching for get_strings queries.
Documentation
- Added AGENTS.md with instructions for codex and with the executive summary of the final plugin that will be developed.
- Updated AGENTS.md and README.md, we do not want to MT on page load but with cronjobs always.
- Updated structure documentation.
- Added custom meta filter snippet.
- Added README duplication and composer flags to release script.
Styles
- HTML formatting to origin translations.
- Codemirror styles.
- Improved styles.
Build
- Composer updates.
- Improved release builder.
- Added export-ignore rules for release archives.
- Added release workflow and packaging script.
- Updated release build output directory.
- Updated export ignores for build archives.
- Removed manifest files from release build.
- Improved styles and releases script.
Internal
- Initial commit.
- Added release build tooling.