The ID Toolbox
← All tools

Placeholder Checker

If %Username% comes back as %Nom%, the substitution stops matching and the learner is greeted by literal text. It fails at run time, in a language nobody on the authoring side reads. Paste both versions or drop in an XLIFF file and every placeholder and tag is compared.

Free · No account · Your files never upload

The source, one string per line
The translation, in the same order
Strings with problems3these will fail at run time
Strings checked3
Carrying placeholders3the rest are plain text
Line 1
srcHello %Username%, you scored {0} out of {1}.tgtBonjour %Nom%, vous avez obtenu {0}.
  • %Username% is in the source and not in the translation. Whatever it stands for will not appear.
  • {1} is in the source and not in the translation. Whatever it stands for will not appear.
  • %Nom% appears in the translation and not in the source. It will render as literal text.
Line 2
srcPress <b>Continue</b> to carry on.tgtAppuyez sur <b>Continuer pour poursuivre.
  • </b> is in the source and not in the translation. Whatever it stands for will not appear.
  • <b> has no matching partner. Formatting will run past where it should stop.
Line 3
src%1$s completed before %2$s.tgt%2$s a terminé avant %1$s.
  • Numbered placeholders were reordered to %2$s, %1$s. The string will render with the values in the wrong places.

What this does

Compares a source string against its translation and reports every placeholder or tag that went missing, appeared from nowhere, changed in number, or moved. Works on pasted text or on an XLIFF file directly.

Why this failure is worse than it looks

It does not break the file. The XLIFF is valid, the import succeeds, the course builds. It breaks at run time, in the target language, on a screen nobody on the authoring side can read. A greeting reading “Bonjour %Nom%” looks entirely correct until a French learner sees their own name replaced by punctuation.

Reordering, which is the subtle one

Numbered placeholders like %1$s and %2$s are often deliberately reordered by a translator, because word order differs between languages and the numbering exists precisely so they can. But if the numbers move without the translator understanding what they refer to, the string still renders and puts the values in the wrong places. That is flagged separately from a missing placeholder, because it is a different kind of wrong and much harder to spot.

What it will not do

It cannot tell you whether the translation is any good. It checks that the machinery survived, which is the half of translation quality assurance a non-speaker can actually do.

Related tools