translations/list-strings reads the strings out of a POT template or a translation — source text, current translation, gettext context, and the source-code references showing where each is used.
Filter to untranslated or fuzzy and it becomes a work queue.
At a glance
| Ability | translations/list-strings |
| Toolset | Loco Translate — toolset/loco-translate |
| Group | Loco Translate › Strings |
| Requires | Loco Translate, active on the site |
| Capability | manage_options |
| Safety | Read-only — changes nothing |
| Repeatable | Idempotent — running it twice leaves the same result |
| Ships in | AcrossAI Abilities Manager 0.0.34 and later |
How it works
Strings are addressed by their source text plus context, never by position. That is deliberate: a sync reorders the whole file, so a stored index would afterwards point at a different string — and a write against the wrong string is a silent, plausible-looking mistranslation.
Omit locale to read the POT template instead of a translation. The template is the canonical list of what exists; a translation is that list with answers filled in.
The file in the response tells you exactly which file was read, which matters on bundles with several text domains or translations in more than one directory.
Input
| Name | Type | Required | What it is |
|---|---|---|---|
bundle | string | Yes | Bundle id, handle or slug — all three appear in Loco’s own screens. Use core for WordPress itself. |
domain | string | No | Text domain. Omit for the bundle default. |
locale | string | No | Locale such as de_DE. Omit to address the POT template instead of a translation. |
filter | string | No — defaults to all | all, untranslated or fuzzy. |
search | string | No | Case-insensitive match against source or translation. |
per_page | integer | No — defaults to 100, max 500 | Maximum rows to return. |
What comes back
| Name | Type | What it is |
|---|---|---|
strings | array | Source, translation, context, references and fuzzy flag. |
count | integer | How many strings were returned. |
total | integer | How many matched before paging. |
file | string | The file that was read. |
success | boolean | Whether the call completed. |
message | string | A one-line summary of what happened, suitable for showing a human. |
error_code | string | Present 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:
What’s still untranslated in the German version of this theme?
It resolves to one call:
{
"ability": "translations/list-strings",
"parameters": {
"bundle": "twentytwentyfive",
"locale": "de_DE",
"filter": "untranslated"
}
}Worth knowing
- Source text plus context is the address. There is no positional index, by design.
- Fuzzy strings are translated but flagged as needing review — usually because the source changed after the translation was written.
- Omitting
localereads the template, which is how you see what a translation is missing entirely.
Related abilities
- Get Translation String — one string in full
- Update Translation Strings — write the answers back
- Sync Translations — why positions are unstable
Get the plugins:
AcrossAI Abilities Manager · AcrossAI MCP Manager
Browse the rest: Every ability, by category