Skip to main content

Diagnostics

The plugin works in the background, so it reports what it did in three places: the Diagnostics screen, Site Health and a menu in the admin bar. Start here when a translation you published does not show on the site.

Sync status​

easyi18n → Diagnostics opens with one row for each background pass. A row has a coloured dot, a sentence about the last pass, how long ago it ran and what it counted.

The Sync status block of the Diagnostics screen on a site that has not synced yet

RowWhat the pass doesShown when
Translation deliveryDownloads published keys and writes the translation filesAlways
Key captureSends the recorded strings to the projectAlways
Page learningReads the site's own pages to learn which strings visitors seeAlways
CoverageCompares a page with its translation and counts what is still in the source languageAlways
Content importSends new and edited postsTranslate content is on
Automatic translationAsks easyi18n to translate imported postsTranslate automatically is on
Content pullDownloads published translations of postsTranslate content is on

The dot is green when the pass worked, grey when it had nothing to do yet, and red when something needs your attention. The messages you are most likely to meet:

MessageWhat to do
The sync has not run yetWait for the first pass
Not configured yet — add your API key and projectConnect the project
Nothing captured yet, so there is nothing to syncSwitch on a text domain and load some pages
No translations are published yetPublish a version of the project's keys
Up to date — the last poll found no changesNothing. This is the normal state
The language directory is not writable, so nothing was writtenGive the web server write access to wp-content/languages/plugins
Push deferred — the API is rate-limiting this site; it will retryNothing. The next pass sends the rest
The capture ledger is fullClear the ledger after switching off the domains you do not need
The scheduled run is overdueWP-Cron is disabled or the site had no visits. Call wp-cron.php from a system cron job
Translation runs were stopped by the project's cost warningStart the run in the dashboard, or raise the cost warning

A pass counts as overdue when its scheduled time passed more than 30 minutes ago. A pass that stopped running would otherwise keep showing its last success.

Page learning​

To send only the strings visitors see, the plugin requests a few pages of its own site and reads what they print. The Page learning row says how many pages it has read and what stopped the last visit, if anything did.

  • A persistent object cache. A visit runs only on WordPress's built-in cache. On a site with a cache drop-in such as Redis, the row says so and the screen prints the lines to add to wp-config.php so the drop-in stays out of those visits.
  • A redirect. A page that redirects is not followed and is not tried again by itself. Fix its address, then select Retry redirected pages.
  • The site cannot reach itself. The row points at the "Loopback request" check of Site Health, which says why.

Until a page has been read, the What visitors see setting sends the same strings as What visitors' requests translate, so nothing is held back by a failed visit.

Coverage​

After the plugin has learned a page, it compares that page with its translated address and reports, on the Coverage row, the share of strings that differ and the first five that are the same in both. For each it names a possible origin: a managed string with no published translation, the title or body of a post, or a file of the theme. When the origin is a text domain you have not switched on, the row links to the list of domains.

The comparison is a hint. A brand name or a number is the same in every language, and a different string is not proof of a good translation.

With WP-CLI you can audit any page and get the whole list:

wp easyi18n audit /pricing/ --lang=es

It prints one line for each string still in the source language, with its possible origin and where it was found.

Clear the capture ledger​

The capture ledger is the site's record of the strings it has seen. Under Maintenance, Clear the ledger empties it after you tick the confirmation box. Use it when the ledger is full of strings from a text domain you have since switched off.

  • Switch off the domains you no longer want first. Otherwise the same strings fill the ledger again as pages are visited.
  • Nothing is deleted in the easyi18n project, and nothing is charged twice: the project recognises the strings it already has.
  • Translations already on the site stay. After the ledger is cleared, the next delivery rewrites the files with the strings recorded since, so a string that no page has shown again yet appears in the source language until one does.

Rebuild the content map​

The site remembers which document of the project belongs to each post. That record lives only in the site's database: restoring a backup or moving to another host can lose it, and the next import could then create a second document for a post, against an allowance that deleting does not give back.

Under Maintenance, Rebuild the content map reads the list of published documents from the project and restores the record. It creates no documents, spends no credits and never replaces a pairing the site already has. A document that was never published is not in that list, so its post stays unpaired.

Run it after a restore or a move, before the next import pass. The result says how many pairings were rebuilt and lists the posts it left alone.

Site Health​

The plugin adds its checks to Tools → Site Health, where they show up with the checks of WordPress itself. None of them is reported as critical: in each case the site keeps working and shows the source language.

Three results of the plugin in the passed tests of Site Health

CheckWhat it reports
WordPress language packsA target language whose WordPress pack is not installed, with a link to install it. Without the pack, dates stay in English. Present once the site has target languages
Plural formats from the translation servicePlural translations the plugin could not read. Those strings stay in the source language. Update the plugin
Formatting tags that block a translationPosts with an empty formatting tag, each with a link to edit it. Present with Translate content on
Open Graph tags from more than one sourceThe theme and an SEO plugin both print social tags, so a share can show the untranslated set
The [ei] marker for text in templatesAnother plugin uses the [ei] shortcode. Use [easyi18n]…[/easyi18n] instead

A check that has had nothing to measure says so, for example "easyi18n has not compiled any translations yet". It does not report a pass before it has looked.

The admin bar menu​

Administrators get an easyi18n menu in the admin bar. On a public page it lists the same page in each language, so you can compare them:

The easyi18n menu of the admin bar on the Spanish home page

  • The source language is marked Original, and the language of the address you are on Current URL. The address can be Spanish while part of the text is still in the source language.
  • Every configured language is listed, including one the public switcher leaves out because the post has no published translation in it.
  • Previews, 404 pages, and posts that are not public or have a password offer no comparison.
  • When the site is not ready, the menu says what is missing: no project connected, no target language, or plain permalinks.

The menu also links to Overview, Settings and Diagnostics, and in wp-admin to View site.