Open Translations → Strings.
- Pick the language in the first box.
- Filter by status:
- All — all of them;
- To translate — waiting;
- Machine — translated by the machine;
- Reviewed — reviewed by you;
- Failed — the service could not translate them.
- Use Search… to look for a sentence.
- Click the translation, fix it and click outside the field. It saves on its own — there is no button.
The Where column says where the sentence appears; hover over it to see the address.
A translation reviewed by hand is never replaced by the machine again.
On the page itself
To fix a translation while looking at the page where it appears:
- Signed in as an administrator, open the site and pick Edit translations → the language in the toolbar. On a page that is already translated, you can also add
?pht_edit=1to the address. - A panel opens on the right with that page’s sentences, in the order they appear. Above, with the flag of the source language, is the site’s text; below, with the flag of the language, the translation.
- Point at a sentence, or click its field, and the page marks where it is.
- Fix it and press Save (or Ctrl+Enter, ⌘+Enter on a Mac). The page changes straight away, without reloading. Cancel puts back what was there. An empty field shows the original text.
- Close the panel with the ×.
Search and the status filter work as in Strings. It also works for draft languages, before you publish them.
The panel only lists the sentences the plugin knows. Text that a WordPress translation pack or another plugin already translates is left out, and the panel says how many there are. For texts that only show with a full cart or in a checkout error, use recording mode first.
With a page cache, visitors see the fix a minute later (see Page cache).
Texts that failed
A text the service cannot translate — not even on its own — is marked Failed and does not block the others. Write the translation by hand in Strings → Failed. The Translate the site button also retries them.
One sentence, one translation
Each sentence has a single translation across the whole site. “Free” is always translated the same way, wherever it appears. If you need different translations for the same word in different places, rewrite the source text to tell them apart.
Recording mode
The plugin reads the site the way an anonymous visitor sees it. That never shows a cart with items, a checkout with validation errors or the message for an invalid coupon — and that is exactly where the sentences that stand out most when left untranslated live.
To catch them:
- Signed in as an administrator, open the site with
?pht_record=1in the address (or click turn on recording mode on the Dashboard). - Browse in the source language: add items to the cart, trigger checkout errors, use an invalid coupon, submit incomplete forms.
- Go back to the Dashboard and click Import recording.
- Click Translate the site to translate what was imported.
It only works for administrators and costs nothing for any visitor.
WordPress translation packs
A translated site has two sources of text:
| Source | What it translates | Cost |
|---|---|---|
| Official WordPress.org packs | The software interface: “Subtotal”, “Proceed to checkout”, “Add coupon”, error messages, dates, currency | Free, reviewed by people |
| This plugin’s dictionary | The site’s content: products, pages, menus, theme texts | License characters |
If a language’s packs are not installed, WooCommerce shows the cart and the checkout in English, with no error explaining why.
That is why the panel shows the Missing translation packs notice with the Install now button, which installs them one language at a time and says what failed.
The packs are not installed automatically when you save a language: the installation can take a while and, with several languages at once, could exceed the server’s time limit.
If the button does not solve it
The installation needs access to WordPress.org and write permission on wp-content/languages. If the server does not have them, the panel shows the WP-CLI commands to run on the server, such as:
wp language core install es_ES
wp language plugin install woocommerce es_ES
Keeping text from being translated
- Brand names and fixed terms — use the Glossary in Settings.
- A block in the editor — under Advanced → Additional CSS class(es), write
notranslate. The block, with everything inside it, stays in the original language. Page builders (Elementor and others) work the same, in their CSS class field. - In HTML — the
translate="no"attribute or thenotranslateclass, which Google Translate also respects:
<span translate="no">Name That Stays The Same</span>
<span class="notranslate">Name That Stays The Same</span>
Post and product titles, category names and the texts of the theme and plugins are translated before they reach the page, and neither of the two protects them there: use the Glossary, or fix them in Strings.
- Addresses — text inside
<address>is never translated. - Names of people, emails, phone numbers, tax numbers and addresses are kept exactly as written.
- A bad translation? Fix it in Strings — it becomes reviewed and protected.