30 days free. No credit card. Full access from the moment you connect your site.

Start free trial

Sync Translations

Plugins change. Strings get added, removed and reworded, and a translation written six months ago slowly stops describing the software it belongs to.

translations/sync-translations reconciles the two: strings that no longer exist are dropped, new ones appear empty, and existing translations are carried across.

At a glance

Abilitytranslations/sync-translations
ToolsetLoco Translate — toolset/loco-translate
GroupLoco Translate › Maintenance
RequiresLoco Translate, active on the site
Capabilitymanage_options
SafetyWrites data
RepeatableNot idempotent — each call changes the row set, so re-running is not a no-op
Ships inAcrossAI Abilities Manager 0.0.34 and later

Why fuzzy matching is switched off

Loco can guess. Given a source string that changed slightly, its fuzzy matcher will attach the old translation to the new string and flag it for review.

That is a reasonable feature with a human in the loop and a bad one without. Here there is no human, so only exact source matches are carried over. A changed string arrives untranslated rather than plausibly wrong — which is the failure mode you can see.

Where a bundle has no POT template, this reconciles against the plugin source code instead. The response says which was used in source, because a sync against source code is a weaker guarantee than one against a maintained template.

before_count and after_count make the scale of the change visible. A large drop means the template lost strings, which is worth understanding before accepting.

Input

NameTypeRequiredWhat it is
bundlestringYesBundle id, handle or slug — all three appear in Loco’s own screens. Use core for WordPress itself.
domainstringNoText domain. Omit for the bundle default.
localestringYesLocale to sync.

What comes back

NameTypeWhat it is
artefactsobjectBytes written per artefact — po_bytes, mo_bytes, php_bytes, json_files, json_bytes. Read back from disk rather than reported by Loco, so a zero mo_bytes means the site is still serving the old strings.
filestringThe PO file that was synced.
before_countintegerHow many strings it held before.
after_countintegerHow many it holds now.
sourcestringWhether the template or the source code was used as reference.
successbooleanWhether the call completed.
messagestringA one-line summary of what happened, suitable for showing a human.
error_codestringPresent only on failure — a stable machine-readable reason, such as a missing field, a wrong field type or an unmet confirmation.

Example

Ask your assistant:

This plugin updated — bring the German translation in line with the new strings.

It resolves to one call:

{
  "ability": "translations/sync-translations",
  "parameters": {
    "bundle": "woocommerce",
    "locale": "de_DE"
  }
}

Worth knowing

  • Compare before_count with after_count. A big fall means strings were dropped, and their translations went with them.
  • No fuzzy matching. Changed strings come back untranslated, on purpose.
  • A sync reorders the file, which is why nothing in this suite addresses strings by position.

Related abilities


Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager

Browse the rest: Every ability, by category


Keep reading