What is String Interpolation & Placeholders?
String interpolation in localization means inserting runtime values into a translated message through placeholders, :name in Laravel, {name} in ICU, %s in printf-style systems. The translation contains the placeholder; the code supplies the value when the message is rendered.
The rule this exists to enforce: never build sentences by concatenation. Code like __('Hello') . ', ' . $name . '!' assumes every language shares English word order and punctuation, which is false. With a placeholder, the translator controls the whole sentence and can move the value wherever the target grammar needs it. Named placeholders beat positional ones for the same reason: they can be reordered freely and their meaning is self-evident.
Placeholders are also a common source of production bugs: a translator renames or deletes one and rendering breaks or leaks a literal :name to users. Good tooling validates that every placeholder in the source appears in each translation, and AI translation prompts should be told explicitly to preserve them verbatim.
// lang/en/messages.php
return [
'greeting' => 'Hello, :name! You have :count new alerts.',
];
__('messages.greeting', ['name' => $user->name, 'count' => 3]);