Verificador de placeholders iOS y Flutter

Pega una cadena de origen y sus traducciones: la herramienta señala los placeholders omitidos, renombrados, con otro tipo o reordenados, tanto en formatos de Apple (%@, %1$@, %lld) como en mensajes ICU de Flutter. Gratis, sin registro, y tu texto nunca sale de tu navegador.

Compara los placeholders

Traducciones que quieres comprobar

Se compara en tu navegador: no se sube nada.

Verifica cada traducción antes de exportar, sin copiar y pegar

LocalePilot es una app de escritorio que compara automáticamente los placeholders de todas tus traducciones con los del origen (%@, %1$@, %lld, ICU), los lista en un centro de QA y bloquea la exportación hasta que se corrige un problema bloqueante. Se está terminando para macOS: deja tu correo para enterarte del lanzamiento.

Qué compara la herramienta

  • Formatos de Apple: %@, %1$@, %d, %ld, %lld, %.2f, %u, %i y %s, posición por posición. %% es texto.
  • Placeholders ICU de Flutter: {name}, incluso dentro de las ramas plural y select.

Las conversiones poco comunes como %e o %x se ignoran a propósito, para que un texto como "20%en" no se tome por un error.

Los errores más frecuentes

  • Un especificador omitido: nada falla, pero el nombre o el número desaparece de la pantalla.
  • Un tipo cambiado: %lld sustituido por %@ lee un entero como un objeto, con riesgo de cierre inesperado.
  • Un orden cambiado sin posiciones: para reordenar, numera cada argumento (%1$@, %2$@); mezclar numerados y sin numerar es un comportamiento indefinido.
  • "20 % de descuento": el espacio antes del signo de porcentaje, que la RAE recomienda en español (y que es obligatorio en francés), hace que % d se lea como un especificador. Duplica el signo: %%.
  • Un placeholder ICU renombrado: {count} convertido en {nombre} cambia la API de todos los idiomas en Flutter.

Estos casos se detallan en la guía sobre especificadores de formato de iOS y en la guía sobre placeholders ICU.

Limitaciones de la herramienta

La herramienta compara placeholders, no el significado: no detecta dos %@ intercambiados cuando los argumentos no están numerados, ni una frase mal traducida. No interpreta el escape con apóstrofos de ICU (la opción use-escaping de Flutter): '{' se lee como una llave. Compara una cadena cada vez; para un archivo completo, usa el verificador de claves faltantes ARB o un editor que verifique cada clave.

Preguntas frecuentes

¿Qué especificadores de formato de iOS se reconocen?

%@, %1$@ (y otras posiciones), %d, %ld, %lld, %.2f, %u, %i, %s; %% se trata como texto. Las conversiones poco comunes como %e o %x se ignoran a propósito.

¿Por qué se señala "20 % de descuento"?

En una cadena de formato, "% d" es un especificador válido (el espacio es un flag de printf), así que "%lld % de descuento" contiene dos especificadores para un solo argumento. Escribe "%lld %% de descuento".

¿Puedo cambiar el orden de los argumentos en una traducción?

Sí, numerando cada argumento: %1$@ es el primero, %2$@ el segundo, estén donde estén en la frase. Dentro de una misma cadena, se numera todo o nada.

¿La herramienta también verifica los mensajes ICU de Flutter?

Sí: los placeholders entre llaves se comparan con los del origen, incluso dentro de las ramas plural y select.

¿Se envía mi texto a un servidor?

No. Tus cadenas, a veces aún sin publicar, se comparan en la página: no se envía nada.

¿En qué se diferencia de LocalePilot?

Esta herramienta compara una cadena cada vez. LocalePilot es una app de escritorio, en fase final para macOS, que compara cada clave de tus archivos ARB, .strings y .xcstrings y bloquea la exportación ante un problema bloqueante.

Recibe un aviso en el lanzamiento

LocalePilot está en su fase final. Deja tu correo para enterarte del lanzamiento.

  • macOS 12 o posterior · Ollama o LM Studio opcionales
  • Interfaz de la app en inglés, francés, español, italiano y portugués.