Block Themes and FSE:
Where Strings Hide—and How to Find Them in Loco
Full Site Editing moves layout into blocks, patterns, and theme JSON, yet WooCommerce and classic extensions still emit gettext from PHP templates and JavaScript-bundled packages. Merchants see one cohesive storefront; localization leads see a maze of theme domains, plugin domains, and editor-saved HTML. This guide maps where strings originate in block themes and how to hunt them systematically inside Loco Translate without mistaking database content for code-born labels.
Updated 2026
WordPress FSE
Block themes bundle templates as HTML files, expose design tokens through theme.json, and register patterns that editors insert into posts and templates. Text you type inside the Site Editor saves into the database as block markup. Text shipped with the theme or plugin as translatable PHP or packaged JSON still flows through gettext domains and appears in Loco. Mixing those origins under one “translate the theme” ticket is how teams overlook half the workload. Query loops and archive templates can blend editor content with theme gettext for pagination, empty states, and “read more” links—note the template slug when debugging.
WooCommerce block checkout and cart introduce additional surfaces: some labels render from block attributes stored per installation, others from core gettext. Extension blocks may load strings from script translations registered on the server. Your QA plan must walk the block checkout path, not only classic shortcode flows, or you will certify locales that fail the moment a shopper hits the block-based pipeline.
When gettext volume outpaces manual typing, compare throughput with Loco AI Auto Translator as a Loco Translate assist suite for block-theme WooCommerce stacks with provider routing, prompts, glossary support, and batch progress. The sections below stay factual about where strings live; assists accelerate only the gettext slice.
theme.json labels and pattern titles surface in projects.Three origins of visible text in block themes
First, content stored as posts: pages, templates saved from the Site Editor, and synced patterns that editors customized. Second, theme-supplied files: pattern HTML under /patterns, template parts, and default template HTML shipped with the theme—often wrapped for translation when authors follow WordPress i18n conventions. Third, plugins: WooCommerce, gateways, memberships, each registering domains independent of how pretty the header template looks.
Loco Translate excels at the second and third buckets when strings are gettext. It does not replace multilingual workflows for the first bucket unless those strings were also registered for string translation elsewhere. Train your team to name which bucket a bug report targets before assigning hours.
Template parts synced from theme updates can overwrite customized markup if your workflow is not careful; gettext MO files behave differently from editor-saved templates. Back up template customizations and document which strings moved from “file” to “database” during a migration, or translators will chase ghosts in Loco that no longer drive the live site.
Navigation block labels, mobile menu toggles, and social link blocks often mix translatable attributes with hard-coded anchor text. When a shopper reports “one icon label is English,” trace the block instance in the Site Editor before assuming a missing PO row.
Official expectations for theme and plugin authors appear in the WordPress internationalization documentation; use it when auditing whether a block theme vendor actually internationalized pattern files or only hard-coded English in HTML.
Lives in the database; translate via your multilingual strategy or by editing each language’s template. Loco alone will not see paragraph text you typed into a Paragraph block unless it is gettext elsewhere.
Patterns and templates on disk may expose gettext domains such as the theme slug. Scan with Loco; watch for updates overwriting custom translations if you patch theme files incorrectly.
WooCommerce and extensions add dozens of domains. Prioritize checkout-critical domains before blog templates.
Accessibility strings—skip links, aria-label attributes on icon-only buttons, and live region announcements—often originate in theme or plugin code even when the visible layout is pure blocks. They fail silently in screen-reader testing if you only visually scan translated pages. Add assistive-tech checks to FSE launch criteria, especially for cart and checkout where errors must be announced clearly.
theme.json, styles, and strings you might not notice
Design tokens and style variations mostly control colors, typography scales, and spacing. Occasionally theme authors surface human-readable labels in navigation or custom block supports. Those labels may be gettext if wrapped correctly; if not, they remain English until the theme ships an update. When evaluating commercial block themes, ask vendors for translation notes the same way you ask about WooCommerce compatibility.
Child themes inherit parent patterns. Your Loco project might need both parent and child domains if the child overrides strings or registers its own. Document which slug is authoritative after updates so translators do not chase duplicates.
Style variations and global styles revisions can change visible labels indirectly by swapping font stacks or spacing, but they rarely fix language. Do not confuse design iteration with localization progress; your checklist should treat them as orthogonal tracks that merge only at QA.
Color contrast and readable type affect perceived translation quality: a cramped mobile header may truncate translated words that fit in English. Schedule responsive screenshots for non-Latin scripts and long German compounds, not only for English benchmarks.
If changing the string in the Site Editor immediately updates the frontend without touching Loco, you are editing database content, not gettext. If it refuses to change until you edit a PO/MO or run a translation sync, you are in gettext territory.
Custom fonts and variable font axes do not translate words, but they change line breaking: languages with long compound nouns or no spaces may reflow unexpectedly after you switch typography in theme.json. Pair typography changes with a quick gettext sanity pass on buttons and notices, not only on hero headings.
Scheduled publishing and staged template rollouts can desync gettext deployments: MO files might promote Friday while Site Editor changes wait Monday. Align release trains or accept that shoppers will briefly see mismatched copy; neither FSE nor Loco magically coordinates calendars without process.
Patterns: pre-built HTML that may or may not be translatable
Theme patterns speed up launches by dropping curated sections—hero, testimonials, pricing—into templates. When pattern files call translation functions, Loco sees those strings. When authors inlined raw English to ship faster, your only options are fork the pattern, open a vendor ticket, or replace the pattern content manually in the editor (which then lives in the database per language).
Agency delivery should classify patterns during discovery: “vendor gettext,” “editor-owned,” or “needs dev patch.” That classification prevents localization budgets from collapsing into arguments in week ten of a build.
Duplicated patterns across landing pages create duplicate editor-owned strings: updating one instance does not update siblings. Establish whether merchandising will rely on synced patterns, reusable blocks, or a translation plugin’s duplication model before you localize at scale.
Teams leaning on governed bulk assists inside Loco AI Auto Translator for theme and plugin gettext backlogs should still verify pattern sources; assists cannot invent gettext that theme authors never registered.
WooCommerce in FSE: blocks, hybrid templates, and extension fog
WooCommerce continues to bridge classic PHP templates and block-based experiences. A store might render block cart in one locale test and fall back to classic fragments in another if a plugin forces it. gettext domains follow the code path actually executed, not the path you prefer aesthetically.
Follow WooCommerce guidance on translating a store when building test matrices: include block checkout, account endpoints, emails, and admin notices if staff use localized wp-admin.
Extensions that inject mini-cart HTML or express payment buttons may ship JavaScript translations separately. If Loco shows the string but the frontend stays English, you might be facing a script translation registration issue rather than a missing PO row. Escalate to the extension vendor with reproducible steps instead of duplicating effort in Loco indefinitely.
| Area | Where to look first |
|---|---|
| Block checkout labels | WooCommerce core + gateway domains in Loco; verify block settings not overriding. |
| Single product layout | Template HTML in theme vs product post content; extension blocks may add domains. |
| My Account tabs | Membership/subscription plugins; often separate text domains from WooCommerce core. |
Hunting strings in Loco: search discipline and domain order
Forms and interactive blocks deserve special attention: validation messages may exist both as block attributes (editor-owned) and as PHP fallbacks (gettext). Capture a screen recording of the failure path when opening a Loco ticket; static screenshots omit the sequence that triggered the English snippet.
Start from the English fragment exactly as it appears, including punctuation. If search fails, try a shorter substring without HTML. If still missing, the text may not be gettext: search theme pattern files or database templates instead.
Prioritize domains by revenue impact: payment, cart, checkout, account, then marketing patterns. Nice-to-have blog strings can wait if launch dates slip. That ordering sounds obvious yet rarely survives cross-team pressure without a written policy.
The Block Editor handbook helps developers understand how blocks serialize attributes; localization leads benefit from knowing that invisible attributes sometimes carry customer-facing labels.
Caching layers complicate verification: full-page caches, edge workers, and fragment caches may serve stale English beside freshly translated gettext until you purge intentionally. Document purge steps per host; FSE sites with aggressive optimization flags see this issue more often than boutique stores on plain VPS tiers.
Multisite networks sharing themes multiply Loco projects: some blogs use the same parent theme with different header templates. Maintain a matrix of blog IDs, active theme slugs, and which MO files each blog loads, or translators will fix the wrong network site.
Glossaries and legal labels when templates change often
FSE encourages frequent visual iteration: new patterns each quarter, fresh headers for campaigns. gettext for fees and refunds should not oscillate with marketing whims. Lock regulated terms in glossaries so bulk assists and human reviewers share the same guardrails.
Align glossary entries with whatever multilingual workflow translates your legal pages; shoppers compare footers, checkout disclaimers, and policy posts. Inconsistent vocabulary erodes trust even when each string is grammatically valid.
Campaign landing pages built from patterns may reuse promotional verbs that clash with sober fee language elsewhere. Glossary rules should flag marketing idioms that must not leak into tax or refund strings during bulk assists.
Export glossary snapshots with releases so compliance can diff what changed between versions. FSE teams ship visuals weekly; legal teams audit quarterly—bridge that cadence with artifacts, not ad hoc emails.
Prompts: tell assists how FSE strings should sound
Block themes often pair minimalist UI copy with bold marketing headings. gettext for buttons and validation should stay short; prompts can enforce that discipline while merchandising teams take liberties in the Site Editor. Without prompts, assists may echo marketing tone inside error strings where clarity matters more than flair.
Document placeholder rules explicitly: WooCommerce and gateways love %s chains. Assists should preserve order; prompts remind operators before someone “improves” grammar by rearranging tokens.
Plural and context variants still appear in mature plugins even as blocks dominate layouts. Prompts should instruct assists to respect _n and context parameters, not flatten them into generic sentences that read fine in English but break inflected languages.
Security-sensitive strings—two-factor prompts, email verification copy—deserve tighter review than hero banners. Tag domains or string families in your runbook as “assist allowed with spot check” versus “human only,” so operators do not apply the wrong risk model because a batch looked boring.
Providers, batch progress, and update storms
Block theme adoption correlates with aggressive update cadences: Gutenberg, WooCommerce, and theme vendors ship frequently. Each update can shift gettext. Visibility into batch progress helps you resume after timeouts instead of guessing which domain finished.
Multiple providers mitigate outages during peak translation weeks. Route staging keys separately from production; FSE sites still process real orders while you localize.
Synthesis: map origins before you optimize tooling
Block themes and FSE change where merchandising copy lives, not the fundamental fact that WooCommerce and extensions speak through gettext. Loco remains the operational center for those domains once you exclude database-saved block content from the same checklist.
Invest in search habits, domain priority, and QA paths that follow actual checkout code. Assists accelerate gettext fills; they do not replace architectural clarity about pattern authorship or script translation issues.
Revisit your map after major theme or WooCommerce upgrades; FSE templates reflow, but gettext regressions arrive as quietly as ever.
Instrument support tickets with language and URL: patterns emerge when certain block combinations or gateway stacks repeatedly expose English. Feed that telemetry back into domain priority instead of fighting one-off fires each sprint.
If you migrate from a classic theme to a block theme mid-life, schedule a gettext diff review: strings that appeared in old template parts may disappear, reappear under new domains, or shift to editor-owned content. Treat the migration as a localization project, not only a design refresh.
Finally, educate stakeholders that FSE “site-wide” edits do not imply “site-wide translation.” Someone still owns gettext domains, someone still owns multilingual posts, and someone still validates checkout. Clarity in RACI charts prevents the Site Editor from becoming a dumping ground for problems that belong in Loco or in your translation plugin. Write it down once; revisit it after every reorg. Onboarding packets for new developers should include a one-page diagram: Site Editor assets, Loco domains, multilingual posts, and WooCommerce runtime paths. Keep it current.
Loco AI Auto Translator as a Loco Translate assist for block-theme WooCommerce stores managing gettext scale fits the plugin and theme string workload while Site Editor teams own canvas content separately.
This guide was a total lifesaver when I was setting up my multilingual WooCommerce store with a block theme. The section about plugin domains and how extensions sneak in all those hidden strings? Nailed it I used Loco Translate and it caught most of them, but I still had to dig through a few WooCommerce blocks manually because they were pulling labels straight from the database instead of gettext. i really wish more theme developers would include translation notes upfront like this guide recommends
This guide saved me hours digging through block themes. the part about theme.json labels and pattern titles was gold finally understood why some strings weren't showing up in Loco. Still had to manually check a few editor saved blocks, but way better than guessing. Worth the read if you're dealing with FSE localization
I've been using Loco Translate for years, but the way it handles block themes and full site editing strings really caught me off guard in a good way. most translation tools get messy when you mix database content with gettext, but Loco keeps editor saved markup totally separate from theme and plugin translations