Reference
Troubleshooting
Start at Gloty → Overview. It runs live health checks against your specific site and usually names the problem before you have to go looking.
Read the Overview screen first
Each issue has a severity and a direct action link. These are the checks Gloty runs:
| Issue | Severity | Meaning |
|---|---|---|
| Translator service not connected | Error | No service URL or API token. Nothing can be translated. |
| No license key configured | Error | Dispatch is blocked until a license is activated. |
| License expired | Error | New translation work stops; existing translations keep serving. |
| Character quota exceeded | Error | Dispatching is blocked until you upgrade or the period resets. |
| Quota above 80% | Warning | Early notice so a large run does not stall midway. |
| License server unreachable | Warning | Usually a temporary network or firewall problem. Gloty uses its cached status and retries. |
| Jobs stuck processing | Warning | Batches in processing for more than 10 minutes, typically waiting on a webhook that never arrived. |
| Jobs failed in the last 24 hours | Warning | Open the Event log on Gloty → Sync for the cause, then re-queue the rows. |
| Automatic translation is delayed | Warning | WordPress cron has not run recently, so work only progresses when you trigger it. |
Nothing is being translated
Work through these in order:
-
Is the site connected?
Gloty → Overview will show Translator service not connected if the service URL or API token is missing. Re-run the connection step in the setup wizard.
-
Is there a license, and does it have quota?
Open Gloty → Billing and click Refresh status. Confirm the plan is active and the usage bar is not full.
-
Is there anything in the queue?
On Gloty → Sync, check the translations queued to send count. If it is zero, run a content scan — nothing has been discovered yet.
-
Force a dispatch
Click Translate now. If jobs appear and complete, the pipeline is healthy and your problem is cron — see the next section.
-
Check outbound connectivity
Some hosts and security plugins block outbound HTTPS. If dispatch fails immediately with a network error, ask your host whether outbound requests are restricted.
It only works when I click "Translate now"
This is the classic symptom of WP-Cron not firing. WordPress cron is triggered by page visits, so on a low-traffic site it barely runs.
The fix is a real cron. Disable WP-Cron in wp-config.php:
define( 'DISABLE_WP_CRON', true );
Then run it from the system scheduler every minute:
* * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
A one-minute uptime-monitor ping at the same URL works just as well. Most managed WordPress hosts offer a cron setting in their control panel.
Jobs are stuck in "processing"
A dispatched batch waits for the service to call back. If that webhook is blocked — by a firewall, a security plugin, or a staging-site password — the batch sits in processing.
Gloty already handles this: a reconciler polls for results every five minutes, and the Overview screen triggers a reconciliation when you open it. Stuck jobs normally resolve themselves within minutes.
If they do not:
- Confirm your site is publicly reachable over HTTPS. Webhooks cannot reach a local or password-protected site — polling is the only path there, which is slower but works.
- Check whether a security plugin or WAF blocks POST requests to the WordPress REST API.
- Re-queue the affected rows from Gloty → Translations using Translate selected.
Language URLs return 404
- Confirm the language is active on Gloty → Languages, not merely configured.
- Go to Settings → Permalinks and click Save. This rebuilds WordPress's rewrite rules.
- Confirm you are not on plain permalinks. Subdirectory language URLs require a pretty permalink structure; Gloty sets one if needed, but a later change can undo it.
The page still shows the old text
Almost always a cache. In order of likelihood:
- Page cache. Gloty purges each language URL when its translations change, but a CDN in front of your site may hold its own copy. Purge the CDN.
- Browser cache. Try a private window.
- The string is not translated yet. Search for it on Gloty → Translations — if it is Pending, it is waiting in the queue.
- The translation is stale. If you edited the source, the old translation is still served and the row is flagged stale. Re-queue it.
Some parts of the page stay in English
| Symptom | Cause and fix |
|---|---|
| Cart / Checkout blocks | They render in JavaScript, so their text is never in the page HTML. Gloty installs WordPress language packs to fix this — re-add or re-activate the language to trigger the install. If a string has no community translation in the pack, it stays in English. |
| A region you excluded |
Check Exclusion selectors in Settings, and
whether the element carries
notranslate or skip-translation.
|
| Text inside an image | Gloty translates text, not pixels. Use per-language images if you need this. |
| A page you have never visited | Interface strings are discovered as pages render. Load the page once in the target language, wait for the queue, then reload. |
| Content from an external embed or iframe | Gloty cannot reach into third-party content served from another domain. |
The queue keeps filling with junk strings
Some themes and plugins pass dynamically assembled text through the translation functions — brand lists, comma-joined names, generated labels. Each variant looks like a unique string.
Gloty recognises and skips generated proper-noun lists, caps how many new strings a single page render may add, and ignores empty strings, numbers, prices, and over-long text. 1.10.1 / 1.11.1
If something still gets through, add a CSS selector for the offending region to Exclusion selectors in Settings. Deleting rows alone will not help while the string is still being captured.
A manual edit was overwritten
This should not happen: rows marked Manually edited are protected from machine sync. Check the row's status on Gloty → Translations. If it says Synced, the edit was not saved — an empty translation is rejected, so make sure the field had content when you saved.
Translated pages feel slow
- Gloty loads all of a page's translations in one query and holds them in memory for the request, so per-string lookups are not your bottleneck. 1.14.0
- The biggest win on a busy site — especially WooCommerce — is a persistent object cache (Redis or Memcached). Without one, every uncached render re-reads from the database.
- A page cache in front of that means most visitors never trigger a render at all.
A page broke after translation
Gloty is built to fail safe. Full-page post-processing is wrapped
so any error results in the original page being served, and a
translation whose printf placeholders do not match the
source is rejected in favour of the source text — so a mistranslated
%1$s cannot fatal a page.
1.5.1 / 1.5.2
If you still hit a broken page, deactivate Gloty to confirm it is the cause, then report it with the URL, the language, and your PHP error log.
Reporting a problem
Include:
- Gloty version, WordPress version, PHP version.
- A screenshot of Gloty → Overview, including any issues listed.
- The Technical details block from Gloty → Sync if the problem involves scanning.
- The correlation ID of an affected job, if the problem involves a specific batch.
- The exact URL and language where you see the problem.