Vérificateur de placeholders iOS et Flutter

Collez une chaîne source et ses traductions : l'outil repère les placeholders oubliés, renommés, de mauvais type ou mal ordonnés, pour les formats Apple (%@, %1$@, %lld) comme pour les messages ICU de Flutter. Votre texte reste dans votre navigateur, et l'outil est gratuit, sans compte.

Comparer les placeholders

Traductions à vérifier

Comparaison faite dans votre navigateur : rien n'est envoyé.

Contrôlez chaque traduction avant l'export, sans copier-coller

LocalePilot est une application desktop qui compare automatiquement les placeholders de toutes vos traductions à ceux de la source (%@, %1$@, %lld, ICU), les signale dans un centre de QA et bloque l'export tant qu'une anomalie bloquante n'est pas corrigée. En finalisation pour macOS : laissez votre email pour être prévenu du lancement.

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.

Questions fréquentes

Quels spécificateurs de format iOS sont reconnus ?

%@, %1$@ (et les autres positions), %d, %ld, %lld, %.2f, %u, %i, %s ; %% est traité comme du texte. Les conversions rares comme %e ou %x sont ignorées volontairement.

Pourquoi « 20 % de remise » est-il signalé ?

Dans une chaîne de format, « % d » est un spécificateur valide (l'espace est un drapeau printf), donc « %lld % de remise » contient deux spécificateurs pour un seul argument. Écrivez « %lld %% de remise ».

Peut-on changer l'ordre des arguments dans une traduction ?

Oui, en numérotant tous les arguments : %1$@ est le premier, %2$@ le deuxième, où qu'ils soient dans la phrase. Dans une même chaîne, tout est numéroté ou rien ne l'est.

L'outil vérifie-t-il aussi les messages ICU de Flutter ?

Oui : les placeholders entre accolades sont comparés à ceux de la source, y compris dans les branches plural et select.

Mes textes sont-ils envoyés à un serveur ?

Non. Vos chaînes, parfois pas encore publiées, sont comparées dans la page : rien n'est envoyé.

Quelle différence avec LocalePilot ?

Cet outil compare une chaîne à la fois. LocalePilot est une application desktop, en finalisation pour macOS, qui compare toutes les clés de vos fichiers ARB, .strings et .xcstrings et bloque l'export en cas d'anomalie bloquante.

Être prévenu du lancement

LocalePilot est en finalisation. Laissez votre e-mail pour être prévenu du lancement.

  • macOS 12 ou ultérieur · Ollama ou LM Studio en option
  • Interface de l'app en anglais, français, espagnol, italien et portugais.