Skip to content

propose_translation

Submit a translation value. Auto-creates the key if it doesn't exist (write-through). Status is set to draft (or translated if explicitly requested); reviewer/approved promotion requires a human reviewer. Identifies the key by namespace + key name + language_code - no uuids needed. The response carries variable_warnings: {missing, extra} (null when interpolation variables match the source) - a non-blocking flag for placeholder drift; check it and fix the value if set. For a PLURAL key, pass plural_forms (a CLDR category->string map covering exactly the target language's required categories) instead of a single value. Set confidence (high|medium|low) so a reviewer can prioritise.

NameTypeDescription
project_uuidstringoptionalProject UUID. Required when multiple projects are configured (SONENTA_PROJECTS); defaults to the single configured project otherwise.
namespacestringrequired
keystringrequired
language_codestringrequiredBCP-47 code (e.g. fr, fr-CA, es).
valuestringoptional
statusstringoptional(draft, translated)
plural_formsobjectoptionalFor PLURAL keys only: a map of CLDR plural category -> rendered string, e.g. {"one":"{{count}} file","other":"{{count}} files"}. Provide EXACTLY the categories the TARGET language requires (call plural_categories to get them); other is always required. Keep the count variable in every form. When set, value may be omitted (it mirrors plural_forms.other). Supplying it for a non-plural key is rejected.
confidencestringoptionalYour confidence in THIS translation: high (sure), medium, or low (a guess that needs a human's eyes). It is stored on the value so a reviewer can prioritise the risky ones, and cleared automatically the moment a human edits the value. State it honestly on every value you propose. (high, medium, low)
{
"tool": "propose_translation",
"arguments": {
"namespace": "<namespace>",
"key": "<key>",
"language_code": "<language_code>"
}
}