2011-01-05 6 views
8

Estoy localizando mi aplicación para iPad/iPhone usando genstrings Classes/*.m para generar el archivo Localizable.strings. La mayoría de las cadenas funcionan bien y obtener la salida esperada, pero con algunas cadenas genstrings está añadiendo o 1$1$ en medio de mis especificadores de formato, como este:

/* No comment provided by engineer. */ 
"%@%i" = "%[email protected]%2$i"; 

/* No comment provided by engineer. */ 
"%@: %i" = "%[email protected]: %2$i"; 

/* No comment provided by engineer. */ 
"%@" = "%@"; 

No he tenido este problema con otras aplicaciones, y como pueden ver, no es consistente. Pero tampoco parece ser aleatorio, ya que cuando ejecuto genstrings en los mismos archivos de clase, los 1$ etc. están siempre en el mismo lugar.

Puedo dejarlos y las cadenas funcionan con el formato correcto, pero los he eliminado manualmente porque no estoy seguro de qué hará el $. Es molesto tener que pasar y actualizar manualmente las cadenas (además es probable que me pierda una).

¿Estoy pensando que podría tratarse de un problema de codificación de texto? ¿O puedo dejarlos en mis hilos de forma segura y simplemente ignorarlos?

+0

¡Puede hacerse rico! :RE – fellowworldcitizen

Respuesta

13

Esos números se refieren a la posición del argumento del valor de reemplazo. Por ejemplo, %2$i significa "reemplazar esto con el segundo argumento, que debe ser un número entero". Esto es útil cuando se localiza en idiomas que usan arreglos de palabras diferentes, porque las cosas se pueden reemplazar en un orden diferente al inglés.

En otras palabras, son seguros para dejar o quitar, y serán útiles para traducciones que suenan naturales a otros idiomas.

6

N$ le dice a printf -style funciones y métodos el orden estricto de los campos de su cadena de formato. De esta manera, cuando la localización de un lenguaje donde el orden es diferente, usted no tiene que modificar el código - sólo la cadena de formato:

printf("%s %s\n", "foo", "bar"); 
printf("%1$s %2$s\n", "foo", "bar"); 
printf("%2$s %1$s\n", "foo", "bar"); 

Salida:

foo bar 
foo bar 
bar foo 
3

puede desactivar la generación de parámetros de posición si no le gusta al pasar

-noPositionalParameters

a genstrings.

Cuestiones relacionadas