Why Isn't My WooCommerce Checkout Translating Correctly?
Why WooCommerce Checkout Text Resists Translation
WordPress and WooCommerce translations work through .po/.mo language files paired with translation function calls (__(), _e(), and similar) wrapping every translatable string in the code. Text that isn't wrapped in one of these functions, or that belongs to a plugin/theme without a translation file for the target language, simply can't be picked up by the site's active translation — it stays in whatever language it was originally written in, regardless of the site's language setting.
Common Causes of Untranslated Strings
- A custom checkout field added via code without wrapping its label or placeholder text in a translation function, which is a common oversight in quickly written custom snippets.
- A third-party plugin (a specific gateway, a shipping method) that either doesn't support the target language at all, or has an incomplete translation missing specific strings.
- A theme's checkout template override with hardcoded text baked directly into the template file, bypassing the translation system entirely.
- An outdated translation file that hasn't been updated to include newer strings introduced in a more recent WooCommerce or plugin version.
How to Fix the Translation
- Identify exactly which text isn't translating and where it's coming from (WooCommerce core, a specific plugin, or a theme template).
- For a plugin/theme without full translation support, a translation management plugin like Loco Translate can add custom translations even where the original source lacks them.
- For custom code, ensure all user-facing strings are properly wrapped in translation functions with a consistent text domain.
- Update outdated translation files after any plugin or WooCommerce version update that might have introduced new strings.
Tracing an untranslated string
- Check the language settings. Look at the site language under Settings → General, and make sure the translation files for that language are installed (Dashboard → Updates shows pending translation updates).
- Find where the string comes from. Search the plugin and theme folders for the exact English text. If it is wrapped in a translation function such as
__(), it can be translated. If it is plain text in a template, it can't be translated without changing the template. - Check the translation file for that plugin. Each plugin has its own text domain and its own language file. A missing or incomplete file for your language explains why one plugin's strings stay in English while WooCommerce's translate fine.
- Look at your multilingual plugin, if you use one. Checkout pages and strings registered by other plugins often need to be scanned and translated in that plugin's string-translation screen.
After editing translations
Keep custom translations somewhere updates won't overwrite them. Loco Translate, for example, can store edits in a separate location. After changing a translation, clear any object or page cache, since translated strings can be cached.
Need a multilingual checkout properly set up and tested? See custom WooCommerce development.