Dica de PHP · publicada em
Quando você escreve __('Olá ') . $nome . __(', você tem ') . $n . __(' pedidos'), o tradutor recebe três fragmentos soltos sem contexto. Em idiomas com ordem de palavras diferente, é impossível traduzir bem.
Com sprintf a frase vai inteira para tradução, com marcadores. E os marcadores posicionais (%1$s) permitem ao tradutor reordenar sem tocar no código.
No WordPress use printf/sprintf junto com esc_html__(), e sempre com o comentário translators: antes, explicando o que é cada marcador — isso aparece no arquivo de tradução e evita erro de quem traduz.
/* translators: 1: nome do cliente, 2: numero de pedidos */
printf(
esc_html__('Olá %1$s, você tem %2$d pedidos.', 'meu-plugin'),
esc_html($nome),
(int) $n
);
Na prática: frase traduzível sempre inteira em sprintf, com marcador posicional e comentário translators:.