Your website contains much more text than just posts and pages. Buttons, labels, error messages, form placeholders, “Read More” links, “Search results for…” headings, “No products found” notices, copyright text in footers, and dozens of other small text fragments come from your WordPress theme and active plugins. These small pieces of text are called “strings” in the translation world, and they need to be translated separately from your content. If you translate all your pages into Spanish but your theme still says “Read More” instead of “Leer Mas”, your site will feel half-translated and unprofessional.
String translation is a one-time effort for each language that you set up. Once you translate your theme and plugin strings, they stay translated unless you update the theme or install new plugins that introduce new strings. Periodic maintenance — checking for new untranslated strings — keeps everything current.
Understanding where strings come from
Strings come from three sources, and it helps to know the difference so you can prioritize:
| Source | Examples | Priority |
|---|---|---|
| Your theme | “Read More”, “Search Results”, “Leave a Reply”, “Posted on”, “By”, footer copyright text | High — these appear on every page |
| Active plugins | WooCommerce: “Add to Cart”, “Proceed to Checkout”. Contact Form 7: “Submit”, “Your message was sent”. Yoast SEO: breadcrumb labels | Medium — visible on pages that use the plugin |
| WordPress core | “Archives”, “Categories”, “Tags”, comment-related strings | Low — most are already translated by WordPress language packs |
Step-by-step: Translating strings for a language
- Go to Lang Forge → String Translation in your WordPress admin menu
- The page opens with a Domain filter and a Translate to filter at the top, plus an Apply button
- Pick a Domain first (your theme text domain or a plugin domain). Strings are grouped by the text domain they come from, and translating “All domains” at once would dump thousands of unrelated rows on you — the filter is the entry point, not an optional refinement
- Optionally pick a single Translate to language to focus the table on that one column
- Click Apply. The table below shows the matching strings
- Showing 1 – 25 of N strings — the results counter tells you exactly where you are. The page is paginated (default 25 rows, switchable to 50 / 100 / 200 using the Per page selector at the top right)
- Pagers live above and below the table. Use Previous / Next or click a page number to jump around
- Click into any translation cell, type the translation. The moment you type, a small You have unsaved changes badge appears next to the Save button. Press Save Translations before paginating — switching pages with unsaved edits triggers a browser warning so you don’t lose them accidentally
- When the filter returns no rows, the empty state shows the active filter and a Clear filter button, so you can tell “no strings match this filter” apart from “there are no strings at all”
AI Translate All Strings (PRO)
Instead of translating strings one by one, PRO users can translate every empty string in the current domain at once — across every paginated page, not just the visible 25:
- Pick a specific Domain in the filter (AI Translate All is disabled without a domain — a contextual banner explains why and tells you to pick one)
- Click the AI Translate All button
- A confirmation dialog asks you to confirm the credit spend
- If you have unsaved edits on the current page, the button will offer to save them first (the page will reload after AI completes, and unsaved edits would otherwise be lost)
- Confirm to start. AI Translate All runs server-side against the full domain, fetches every empty translation for every active target language, translates in batches of 20, and writes the results directly to the database. You do not need to click Save afterwards
- After a reload the freshly saved translations appear in the textareas. Paginate through the other pages to review — they’re already saved
- AI handles most strings well, but you should still check strings that contain brand names, technical terms, or context-dependent phrases
On the Free plan, the AI Translate All button appears but is disabled, with a tooltip explaining it is a PRO feature.
When do I need to click Save?| Action | Save needed? |
|---|---|
| Typed into a textarea manually | Yes — the “You have unsaved changes” badge appears, and a browser warning will fire if you try to paginate or close the tab before saving |
| Clicked AI Translate All | No — translations are written to the database on the server and the page reloads to show them |
| Mixed (you typed some edits, then clicked AI Translate All) | The AI button offers to save your manual edits first, because the reload after AI would otherwise discard them |
Real-world example: Translating a WooCommerce theme
A content manager is setting up a French version of an online store. She goes to String Translation, selects French, and filters by the theme source first. She translates 45 theme strings including “Add to Cart” (Ajouter au Panier), “Search Products” (Rechercher des Produits), “Sale!” (Solde!), and “Out of Stock” (Rupture de Stock). Then she switches the filter to WooCommerce and translates 120 plugin strings including checkout labels, cart headers, and account page navigation. Using AI Translate All, the entire process takes about 10 minutes including review time. Without AI, it takes about an hour of manual work.
Common mistakes to avoid
- Ignoring strings after a theme update. When your theme is updated, new strings may appear. Visit the String Translation page periodically and filter by “Untranslated” to catch new strings
- Translating WordPress core strings manually. Most core WordPress strings are already translated by official language packs. Focus your effort on theme and plugin strings
- Forgetting context. Some strings are ambiguous out of context. “Post” could mean a blog post or the action of posting something. Check how the string is used on the frontend before translating
> Tip: Translate your theme strings first because they appear on every page — navigation, footer, sidebar, and archive pages. Plugin strings can be translated next, starting with whichever plugins are most visible to your visitors.
> Good to know: If you install a new plugin or switch themes, new strings will appear in the String Translation page. The previously translated strings from your old theme or deactivated plugins are preserved — they simply stop being used on the frontend.
Automatic String Registration
Lang Forge can automatically detect and register theme and plugin strings as they appear on your site’s frontend. This means you do not need to manually register strings — they show up in the String Translation page on their own after a visitor views a page that contains them.
To configure which plugins and themes are auto-registered:
- Go to Lang Forge > Languages (Settings page)
- Scroll down to String Auto-Registration Domains
- Enter the text domains of your theme and any plugins you want to auto-register, one per line. By default, your active theme’s text domain is used
- Save settings
After saving, visit any page on the frontend. All translatable strings from the specified domains will automatically appear in String Translation, ready to be translated.
> Note: WordPress core strings and Forge Suite plugin strings are never auto-registered — they are either handled by WordPress language packs or by the plugin internally. Only strings from the domains you specify will be collected.
> For developers: Use standard WordPress __() and _e() functions with your theme’s text domain. Lang Forge hooks into the gettext filter and auto-registers strings from allowed domains. See the Developer Guide for details.
[Screenshot: The String Translation page showing the language selector, source filter, status filter, and a table of strings with original text and translation fields]
—