Ce que l'outil compare
- Formats Apple :
%@, %1$@, %d, %ld, %lld, %.2f, %u, %i et %s, position par position. %% est du texte.
- Placeholders ICU de Flutter :
{name}, y compris à l'intérieur des branches plural et select.
Les conversions rares comme %e ou %x sont ignorées exprès, pour qu'un texte comme « 20%en » ne soit pas pris pour une erreur.
Les erreurs les plus courantes
- Spécificateur oublié : rien ne plante, mais le prénom ou le nombre disparaît de l'écran.
- Type changé :
%lld remplacé par %@ fait lire un entier comme un objet, avec un risque de plantage.
- Ordre modifié sans positions : pour réordonner, numérotez tous les arguments (
%1$@, %2$@) ; mélanger numéroté et non numéroté est un comportement indéfini.
- « 20 % de remise » : en français, l'espace avant le signe pourcentage fait lire
% d comme un spécificateur. Doublez le signe : %%.
- Placeholder ICU renommé :
{count} devenu {nombre} change l'API de toutes les langues dans Flutter.
Ces cas sont détaillés dans le guide sur les format specifiers iOS et le guide sur les placeholders ICU.
Limites de l'outil
L'outil compare uniquement les placeholders : il ne détecte pas deux %@ permutés quand les arguments ne sont pas numérotés, ni une phrase mal traduite. Il n'interprète pas l'échappement par apostrophe d'ICU (option use-escaping de Flutter) : '{' y est lu comme une accolade. Il compare une chaîne à la fois ; pour un fichier entier, utilisez le vérificateur de clés manquantes ARB ou un éditeur qui contrôle toutes les clés.