Polyglot helps administrators run controlled translation jobs from Tools > Polyglot for:
- Polylang String Translations
- Pages, Posts, and public Custom Post Types (CPTs)
The plugin is designed for safe, incremental translation workflows and does not create missing translated posts.
Polyglot is built for projects that use WordPress as a CMS with a clear separation between content and presentation (for example, headless WordPress setups). It is not recommended for page-builder-heavy workflows (such as Elementor) where content and presentation are tightly coupled.
Configuration
- Save Google API key in WordPress admin
- API key is stored encrypted in WordPress options
- Tabs are locked until an API key is configured
Translation Strings tab
- Select Polylang string group
- Select source and target languages
- Translate only missing target-language string values
- Background queue processing with live progress
Pages, Posts and CPT tab
- Select one content type (page, post, or one public CPT)
- Select source and target languages
- Choose translation scope:
- default content only (title, content, excerpt)
- default content + custom fields
- Custom field mode includes:
- inline preview of custom field names that Polyglot will attempt to translate
- explicit risk acknowledgment checkbox before job start
Translation rules
For each eligible source/target pair, a field is translated only when:
- target value equals source value, or
- source value is non-empty and target value is empty.
If target has different non-empty content, it is treated as edited and skipped.
Custom field safety
When custom-field translation is enabled, Polyglot auto-detects non-protected meta keys and applies safeguards:
- skips protected/internal keys
- skips technical key patterns (for example id, slug, token, url, hash)
- skips values that look serialized/JSON/URL/numeric/token-like
- supports exclusion hook:
polyglot_excluded_meta_keys
Default excluded keys currently include:
Job processing and progress
- Jobs run in background batches using WP-Cron
- Progress view includes status, remaining, scanned, translatable, translated, skipped, failed, and last error
- If no eligible fields are found, Polyglot shows a success notice and does not start a queue
Troubleshooting failed jobs
If a job ends with done_with_errors, open the Job Progress panel and review the Failure details list.
Each row includes:
- Error category ([API], [SAVE], [OTHER])
- Error message
- Related identifiers (field key, language, post IDs, or string name)
To inspect raw job data directly:
- wp option get polyglot_translation_job --format=json
Key fields:
- status
- last_error
- totals.failed
- errors[]
If errors are API-related, verify:
- Cloud Translation API is enabled in the same Google Cloud project used by the key
- Billing is enabled for that project
- API key restrictions allow this WordPress instance (referrer/IP restrictions and API restriction to Cloud Translation API)
Important billing notice
Google Cloud Translation API is a paid service with usage-based pricing.
- Large translation jobs can generate significant costs
- Review quotas, billing settings, and pricing before running bulk jobs
Disclaimer
Polyglot is provided as is, without any warranty of any kind.
- Use this plugin at your own risk.
- Always create a full database and files backup before running translation jobs.
- Translation jobs can modify content and custom fields; review your settings and previews carefully before starting.
- The plugin author is not liable for data loss, site issues, translation quality issues, or other damages resulting from use.